On 2/1/06, Damphyr <damphyr / freemail.gr> wrote:> What are my alternatives?
Here's a thought:
class Wrapper instance_methods.grep(/^[^_]{2,2}/).each{|im| undef_method im } attr_accessor :handlers
def initialize(obj) @handlers ||= Hash.new{|h,k| h[k] = []} @obj = obj end
def method_missing(mname, *args, &block) if mname.to_s[0,3] == "on_" @handlers[mname.to_s[3..-1]] << [block, args] else @handlers[mname.to_s].each{|handler, hargs| handler.call(*(hargs+[mname]+args)) } @obj.send(mname, *args, &block) end end
end
w = Wrapper.new("foo")#=> "foo"
w.on_reverse{ puts "reversed!" }w.on_split{|m,splitter| puts "someone's splitting with #{splitter.inspect}" }
w.reverse#reversed!#=> "oof"
w.split(//)#someone's splitting with //#=> ["f", "o", "o"]