From: Pit Capitain Date: 2005-05-06T17:01:59+09:00 Subject: Method hooks in singleton classes Hello Ruby-maintainers, currently the hooks method_added, method_removed, method_undefined are *not* sent to singleton_classes. Instead, the corresponding singleton method hooks are sent to the "attached" instance. Example from eval.c: if (FL_TEST(klass, FL_SINGLETON)) { rb_funcall(rb_iv_get(klass, "__attached__"), singleton_added, 1, ID2SYM(mid)); } else { rb_funcall(klass, added, 1, ID2SYM(mid)); } Is there any chance to always execute the else clause, as in: if (FL_TEST(klass, FL_SINGLETON)) { rb_funcall(rb_iv_get(klass, "__attached__"), singleton_added, 1, ID2SYM(mid)); } rb_funcall(klass, added, 1, ID2SYM(mid)); With this change, both the singleton method hooks and the method hooks would be called in the case of a singleton class. The reason I'm asking: in a library I'm writing I'd like to be able to catch *every* method redefinition for a given object. Something like o = Object.new def o.singleton_method_added( m ) puts "gotcha" end Currently, this works only as long as the singleton_method_added method isn't overridden. If someone later redefines def o.singleton_method_added( m ) puts "no more" end the original method isn't called anymore. Changing Ruby as proposed would allow me to do class << o def method_added( m ) puts "gotcha" end end and get notified even when singleton_method_added is redefined. I could send patches for this change, if you like. Regards, Pit