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