Description
A cool proxy implementation pattern in ruby
Install
sudo gem install proxy_machine
Example usage
The awesome way:
p = proxy_for [1, 2, 3]
p.reverse => [3, 2, 1]
p = proxy_for [1, 2, 3], :before => {
:reverse => lambda {|obj| puts 'before reverse'}
}
p.reverse => before reverse
[3, 2, 1]
How to detect that the object is a proxy?
The beautiful way
o1 = [1, 2, 3]
o1.proxied? => false
o2 = proxy_for [1, 2, 3]
o2.proxied? => true
Other way
p = proxy_for [1, 2, 3]
defined? p.proxied_class?
Trying it in irb
irb
require 'proxy_machine'
proxy_for...
Other ways:
1º - Creates a proxy for the informed object
p = Proxy.new [1,2,3]
p.size => 3
2º - A proxy with a before callback.
p = Proxy.new [1,2,3], :before => {
:size => lambda {|obj| puts "before: #{obj.inspect}"}
}
p.size => before: [1, 2, 3]
3
3º - A proxy with a after callback
p = Proxy.new [1,2,3], :after => {
:size => lambda {|obj, result| puts "after: #{obj.inspect}: result => #{result}"}
}
p.size => after: [1, 2, 3]: result => 3
3
4º - Both
p = Proxy.new [1,2,3],
:before => {
:size => lambda {|obj| puts "before: #{obj.inspect}"}
}, :after => {
:size => lambda {|obj, result| puts "after: #{obj.inspect}: result => #{result}"}
}