class Spank::Proxy

Public Class Methods

new(target, interceptor_chain = InterceptorChain.new) click to toggle source
# File lib/spank/proxy.rb, line 3
def initialize(target, interceptor_chain = InterceptorChain.new)
  @target = target
  @interceptor_chain = interceptor_chain
end

Public Instance Methods

add_interceptor(method, interceptor) click to toggle source
# File lib/spank/proxy.rb, line 8
def add_interceptor(method, interceptor)
  @interceptor_chain.push(interceptor)
  self.extend(create_module_for(method))
  self
end

Private Instance Methods

create_invocation_for(method, args, block) click to toggle source
# File lib/spank/proxy.rb, line 16
def create_invocation_for(method, args, block)
  Invocation.new(@target, method, args, block)
end
create_module_for(method) click to toggle source
# File lib/spank/proxy.rb, line 28
def create_module_for(method)
  Module.new do
    define_method(method.to_sym) do |*args, &block|
      invocation = create_invocation_for(method, args, block)
      @interceptor_chain.intercept(invocation)
      invocation.result
    end
  end
end
method_missing(method, *args, &block) click to toggle source
# File lib/spank/proxy.rb, line 20
def method_missing(method, *args, &block)
  if block
    @target.public_send(method, *args, block)
  else
    @target.public_send(method, *args)
  end
end