From: Robert Klemme Date: 2004-10-22T23:09:16+09:00 Subject: Re: #extend_object only for #extend and not #include "Gavin Kistner" schrieb im Newsbeitrag news:8529C86C-2430-11D9-A186-000A959CF5AC@refinery.com... > Just thought I'd point out my surprise that the Module#extend_object > callback only fires when #extend is explicitly called, and not when the > module extends the class via #include: > > module Foo > def self.extend_object( o ) > p "#{o} just extended by #{self}" > end > end > > class Bar; include Foo; end > class Bar2; self.extend( Foo ); end > > #=> "Bar2 just extended by Foo" Well, that's quite logical, isn't it? I mean, include and extend are two different cups of tea. Apart from the solution Guy posted you can do this: module Foo def self.extend_object( o ) p "#{o} just extended by #{self}" end def self.included( o ) p "#{o} just included #{self}" end end >> class Bar; include Foo; end "Bar just included Foo" => Bar >> class Bar2; self.extend( Foo ); end "Bar2 just extended by Foo" => Bar2 And for classes there is #inherited: class Base def self.inherited(cl) p "#{cl} just inherited #{self}" end end >> class Derived < Base ; end "Derived just inherited Base" => nil Kind regards robert