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