ts wrote:
>>>>>> "D" == Daniel Schierbeck <daniel.schierbeck / gmail.com> writes:
> 
> D> As you can see, Module#append_features doesn't call the .included method 
> D> on the module, include does.
> 
>  Well, it's best to see it like this :
> 
> moulon% cat b.rb
> #!/usr/bin/ruby
> module M
>    def self.included(klass)
>       puts "Included in #{klass}"
>    end
>    def a
>       puts "a"
>    end
> end
> 
> class A
>    include M
> end
> 
> A.new.a
> moulon% 
> 
> moulon% ./b.rb
> Included in A
> a
> moulon%
>  
> moulon% cat b.rb
> #!/usr/bin/ruby
> module M
>    def self.append_features(klass)
>       puts "Included in #{klass}"
>    end
>    def a
>       puts "a"
>    end
> end
> 
> class A
>    include M
> end
> 
> A.new.a
> moulon% 
> 
> moulon% ./b.rb
> Included in A
> /b.rb:15: undefined method `a' for #<A:0xb7d64b38> (NoMethodError)
> moulon% 
> 
> 
> Guy Decoux

Um, yeah. `append_features' does the actual work (appending the methods 
of a module to a class/module), `include' just calls `append_features' 
and then `included'.

   class Module
     def include(*mods)
       mods.each do |mod|
         mod.append_features(self)
         mod.included(self)
       end
     end
   end


Cheers,
Daniel