class Proxies::Proxy
Public Class Methods
new(lazy_target, options = {}, &block)
click to toggle source
Creates a new proxy for target. You can pass a block (anonymous module) to extend the proxy object “inline”.
Options¶ ↑
-
:owner
- Optional owner object -
:extend
- Module or array of modules used to extend -
the newly created proxy object
Examples¶ ↑
Proxy.new(lambda { [1, 2, 3] }) do def extension_method proxy_target.length * 500 end end Proxy.new(lambda { my_method }, extend: MyExtension) do def add_owner_and_target_values proxy_target.value + proxy_owner.value end end Proxy.new(lambda { my_method }, owner: self) do def do_something ... end end Proxy.new(lambda { something }, extend: [FirstExtension, SecondExtension])
# File lib/proxies/proxy.rb, line 46 def initialize(lazy_target, options = {}, &block) @lazy_target = lazy_target @owner = options[:owner] if options.key?(:owner) extends = ::Kernel.Array(options[:extend]) extends << ::Module.new(&block) extends << ::Proxies::ProxyOwner if defined?(@owner) extends << ::Proxies::ProxyRespondTo extends.each { |m| m.send(:extend_object, self) } end
Public Instance Methods
method_missing(name, *args, &block)
click to toggle source
# File lib/proxies/proxy.rb, line 61 def method_missing(name, *args, &block) proxy_target.send(name, *args, &block) end
proxy_target()
click to toggle source
# File lib/proxies/proxy.rb, line 57 def proxy_target defined?(@target) ? @target : @target = @lazy_target.call end
respond_to?(name, include_private = false)
click to toggle source
# File lib/proxies/proxy.rb, line 65 def respond_to?(name, include_private = false) proxy_target.respond_to?(name, include_private) end