method
delegate_missing_to
v5.1.7 -
Show latest stable
- Class:
Module
delegate_missing_to(target)public
When building decorators, a common pattern may emerge:
class Partition def initialize(first_event) @events = [ first_event ] end def people if @events.first.detail.people.any? @events.collect { |e| Array(e.detail.people) }.flatten.uniq else @events.collect(&:creator).uniq end end private def respond_to_missing?(name, include_private = false) @events.respond_to?(name, include_private) end def method_missing(method, *args, &block) @events.send(method, *args, &block) end end
With `Module#delegate_missing_to`, the above is condensed to:
class Partition delegate_missing_to :@events def initialize(first_event) @events = [ first_event ] end def people if @events.first.detail.people.any? @events.collect { |e| Array(e.detail.people) }.flatten.uniq else @events.collect(&:creator).uniq end end end
The target can be anything callable within the object. E.g. instance variables, methods, constants and the likes.