why does self.included work but not include/extend

I have interesting situation.

a.rb #file class A include M end

b.rb #file module M include X extend Y end module X def instance_method end end module Y def class_method end end

A.class_method => undefined method class_method

Thats strange because what I expect to happen is module M extends Y so those class methods of Y are copied into A, and hence the A object can access those class methods.

But thats not what happened. Ruby couldnt find the class methods. Yet when I change to this it worked:

a.rb #file class A include M end

module M

   def self.included(base)     base.send :include, X     base.send :extend, Y   end

  module X     def instance_method     end   end

  module Y     def class_method     end   end end

A.class_method => nil

So this works, and the only difference is that X and Y modules are declared in M. Also I use the included hook which gets called when M is included in class A, and then passes A into argument list. Then we dynamically send methods (since include is a private method of A) of A, particuarly the inclue and extend methods passing our modules as arguments. And now it works.

But why didnt the first example work?

thanks for response