"Robert Klemme" <bob.news / gmx.net> schrieb im Newsbeitrag news:... > > "Peñá, Botp" <botp / delmonte-phil.com> schrieb im Newsbeitrag > news:1030AB5FAD0A3847B7B1F7B93332AFB501E18290 / bgmail00.delmonte-phil.com... > > Hi Friends, > > > > Forgive me in adv for asking a newbie question. > > > > 1. First question: How do I get the the method passed? > > > > Eg. > > > > >cat test1.rb > > #------------------------- > > class Dog > > def bark > > 'arf!arf!' > > end > > def method_missing(x) > > p "method missing" > > "sorry, cannot do #{x} in #{self}" > > end > > end > > > > beethoven = Dog.new > > p beethoven.bark > > p beethoven.purr > > #------------------------- > > > > >ruby -w test1.rb > > "arf!arf!" > > "sorry, cannot do purr in #<Dog:0x2777228>" > > > > > > I'd like a method similar to method_missing(x) (wherein the methodname is > > passed in x), but only access it before a method is run (maybe name it > > method_called(x)). > > > > So I can do (maybe), > > > > .. > > Class Dog > > .. > > def method_called(x) > > p "You ask for #{x}" > > end > > end > > Tracing is one option. See > http://www.rubycentral.com/book/ref_m_kernel.html#Kernel.set_trace_func > > Another option is to use a similar scheme as in Delegator and automatically > generate proxy methods that invoke your "method_called" just before they > hand over control to the real method. > http://www.rubycentral.com/book/lib_patterns.html > > Which of the approaches you choose depends on your situation. > > Tehre might be another option to define a module / class method that > automatically creates a new method that first invokes method_called and the > the original method. Sorryy, I don't have the time at the moment to put > such a thing together. Cancel that. This works: class Module def notify(sym) new_sym = "#{sym}_old".intern alias_method new_sym.to_s, sym.to_s define_method sym do |*args| puts "#{sym} called with args: #{args.inspect}" send( new_sym, *args ) end end end class Foo def bar puts "bar!" end notify :bar end Foo.new.bar Regards robert