On 5/16/07, Dave Hoefler <dhoefler / gmail.com> wrote: > Hi there, > > I see the following code chunk in a lot of Rails plugins: > > def self.included(base) > base.extend(ClassMethods) > end > > module ClassMethods > def method_one > end > > def method_two > end > end > > > I'm most curious about "self.included". I checked out the docs on 'included' > (http://www.ruby-doc.org/core/classes/Module.html#M001661). This is the doc about #include not #included!! >They pointed to > 'Module.append_features' ( > http://www.ruby-doc.org/core/classes/Module.html#M001659). Even after > reading the docs, I'm still a little lost. Could someone break it down a > little more than the docs? ...or point me at some other resource. I'd like > to know "why" this is done. > > Thanks, > Dave > The included hook is run whenever a module is included. The parameter base passed to the hook is referring to the class into which the module is included. Basically def self.included(base) base.extend(ClassMethods) end means: and if you include me you also extend your class to all methods defined in ClassMethods. This means that instead of writing class X include Y extend ClassMethods end you write class X include Y # ==> the hook does X.extend(ClassMethods) end Although I do not know Rails it might be a reasonable guess that the functionality of ClassMethods is closely coupled with the functionality of the inserted module - and that methods of the module need class methods from ClassMethods. HTH Robert -- You see things; and you say Why? But I dream things that never were; and I say Why not? -- George Bernard Shaw