From: Robert Klemme Date: 2008-02-07T00:41:51+09:00 Subject: Re: Pattern for "include"ing class methods? 2008/2/6, Clifford Heath : > ara howard wrote: > > module M > > module ClassMethods > > end > > > > module InstanceMethods > > end > > > > def M.inherited other > > other.send :extend, ClassMethods > > other.send :include InstanceMethods > > end > > end > > Interesting idea, but it doesn't seem to work, and I don't see > how it could (though I've mangled it into something different > that does work). > > How and when should module M get used, and how does inherited > get called? > > My look at the Ruby doc says the "inherited" callback only works > on classes, not on modules...? Is this a 1.9 thing? If I change > M to a class, then of course I can't use it as the argument to > include or extend :-). > > What I *did* get to work was to add a method to class Module that > does the include and extend. Which I guess I knew I could do anyhow... What stops you from doing module InstMeths end module ClassMeths end def adjust(cl) cl.extend ClassMeths cl.send :include, InstMeths end adjust MyClass adjust YourClass or even set_of_classes.each {|cl| adjust cl} ? (probably with a more expressive method name than "adjust") Kind regards robert -- use.inject do |as, often| as.you_can - without end