Proxy Party
Greatly facilitates adding proxies through the proxy method_missing pattern.
Can now also dynamically add proxy methods and use other amazing meta strategies!
Install
$ gem install party_proxy
Use
require 'party_proxy'
Latest news
Now supports renaming of proxy method so you can avoid method name collisions!
TODO
Major DRYing up needed. Currently a lot of code duplication :O
Usage
class State attr_accessor :name def initialize(name) @name = name end end class Info attr_accessor :text def initialize(text) @text = text end end module Party class Subject # proxy state and info objects to make their methods # directly accessible from subject objects proxy :state, :info def initialize(name) @state = State.new name @info = Info.new 'hello' end end end
describe Party::Proxy do describe '#proxy' do it "proxies state and info so it can call name directly on subject" do subject = Party::Subject.new 'kristian' subject.name.should == 'kristian' end end describe '#proxy_for' do it "proxies speak_it! on mic" do subject = Party::Subject.new 'kristian' subject.mic = Mic.new 'hello' Party::Subject.proxy_for :mic, :speak_it! subject.proxy_for :mic, :speak_it! subject.speak_it!.should == 'hello' end it "proxies speak_it! as speak_up! on mic" do subject = Party::Subject.new 'kristian' subject.mic = Mic.new 'hello' Party::Subject.proxy_for :mic, :rename => {:speak_it! => :speak_up!} subject.speak_up!.should == 'hello' end end describe '#proxy_accessor_for' do it "proxies speak accessor methods on mic" do subject = Party::Subject.new 'kristian' subject.mic = Mic.new 'hello' # multi subject.proxy_accessors_for :mic, :speak, :miau # single subject.proxy_accessor_for :mic, :speak subject.proxy_accessor_for :mic => :speak subject.speak = 'do it!' subject.speak.should == 'do it!' end it "proxies speak accessor method on mic as yell" do subject = Party::Subject.new 'kristian' subject.mic = Mic.new 'hello' subject.proxy_accessors_for :mic, :rename => {:speak => :yell} subject.yell = 'do it!' subject.yell.should == 'do it!' end end describe '#named_proxies' do it "proxies select :mic and :state methods" do subject = Party::Subject.new 'kristian' subject.mic = Mic.new 'hello' subject.named_proxies :mic => :speak, :state => :name subject.speak = 'do it!' subject.speak.should == 'do it!' subject.name = 'kris' subject.name.should == 'kris' end end end
Note on Patches/Pull Requests
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don’t break it in a
future version unintentionally. - Commit, do not mess with rakefile, version, or history.
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull) - Send me a pull request. Bonus points for topic branches.
Copyright
Copyright © 2010 Kristian Mandrup. See LICENSE for details.