module Forwarder::Meta

Constants

ObjectContainer

Public Instance Methods

eval_body(application, as, to, with) click to toggle source
# File lib/forwarder/meta.rb, line 4
    def eval_body application, as, to, with
      lambda do |*args, &blk|
        arguments = ( [ with ].flatten + args ).compact
#         rcv = __eval_receiver__( to )
        rcv = Meta.eval_receiver to, self
#        p as: as, to: to, rcv: rcv, args: arguments, app: application, self: self
        rcv.send( as, *arguments, &(application||blk) )
      end
    end
eval_chain(names, context) click to toggle source
# File lib/forwarder/meta.rb, line 14
def eval_chain names, context
  names.inject context do | ctxt, name |
    Meta.eval_symbolic_receiver name, ctxt
  end
end
eval_receiver(name, context) click to toggle source
# File lib/forwarder/meta.rb, line 20
    def eval_receiver name, context
      case name
      when Proc
        context.instance_eval( &name )
      when String, Symbol
#        p name: name, context: context
        Meta.eval_symbolic_receiver name, context
      when ObjectContainer
        name.object
      when Array
        Meta.eval_chain name, context
      end
    end
eval_receiver_body() click to toggle source
# File lib/forwarder/meta.rb, line 33
def eval_receiver_body
  lambda do | name |
  end
end
eval_symbolic_receiver(name, context) click to toggle source
# File lib/forwarder/meta.rb, line 38
def eval_symbolic_receiver name, context
  case "#{name}"
  when /\A@/
    context.instance_variable_get name
  else
    context.send name
  end
end