From: Robert Klemme Date: 2011-04-16T22:30:37+09:00 Subject: Re: looking for an "inversion" pattern On 15.04.2011 17:40, Fearless Fool wrote: > Thanks everybody!! You're welcome! >> I am sorry, I still do not understand your motivation to have a class >> method which receives an instance as first argument. > > My motivation is that I was writing a lot of code like this: > > module HasXattr > def xattr_reference(key); Xattr.xattr_reference(self, key); end > def xattr_store(key, value); Xattr.xattr_store(self, key, value); > end > def xattr_has_key?(key); Xattr.xattr_has_key?(self, key); end > def xattr_delete(key); Xattr.xattr_delete(self, key); end > ... > end > > .. and I thought to myself: this is Ruby. There must be a better way. > I guess I should have shown this concrete example earlier in the thread. With my code you could do module HasXattr def xattr # foo in your lingo proxy(Xattr) end end or directly use it in your class module HasXattr def xattr # foo in your lingo proxy(Xattr) end end Then you can do obj.xattr.has_key? "k" or obj.xattr.tap |x| x.store "k", "v" unless x.has_key? end Btw, what is Xattr? Where does it come from and what does it do? From the looks it seems to be some external storage for attributes associated with your instance which you do not want to store in the instance itself (for whatever reasons). What do you need that for? Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/