method

delegate_missing_to

Importance_2
v5.1.7 - Show latest stable - 0 notes - 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.

Show source
Register or log in to add new notes.