Module: DeferedDelegator

Included in:
Binder::AR
Defined in:
lib/defered_delegator.rb

Overview

Private: A simple module that delegates classes methods when needed, keeping the calls in memory.

Examples

class Foo
  def self.foo arg
    "World of #{arg}"
  end
  #
  def self.bar
    "Hello"
  end
end

class Baz
  extend DeferedDelegator
  register_delegators :bar, :foo
  #
  def initialize obj
    @obj = obj
  end
  #
  def foobar
    delegate_to @obj
  end
end

class Bar < Baz
  foo "Foo"
  bar
end

Bar.new Foo
Bar.foobar
# => "World of Foo"
# => "Hello"

Instance Method Summary collapse

Instance Method Details

#delegate_to(klass_or_object) ⇒ Object

Public: Triggers the delegation and run the delegated methods

klass_or_object - A Class or an Object to delegate to.

Returns Nothing.



60
61
62
63
64
65
66
67
68
# File 'lib/defered_delegator.rb', line 60

def delegate_to klass_or_object
  @delegators.each do |data|
    unless data.empty?
      name = data[:name]
      args = data[:params]
      klass_or_object.send(name, *args)
    end
  end
end

#register_delegators(*args) ⇒ Object

Public: Allows to register delegators

args - List of Symbols, the method name that will be delegated.

Returns Nothing.



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/defered_delegator.rb', line 43

def register_delegators *args
  args.each do |delegator|
    delegator = delegator.to_s
    module_eval %Q{
      def self.#{delegator} *parameters
        @delegators ||= []
        @delegators << { name: :#{delegator}, params: parameters }
      end
    }
  end
end