I read the API for ActiveSupport::Concern. There are ClassMethods and InstanceMethods, we can put class methods in ClassMethods.
But the M‘s host can use the methods defined in M, can’t it? Why can’t I just write:
module M
def self.x
end
def y
end
end
rather than:
module M
module ClassMethods
def x
end
end
module InstanceMethods
def y
end
end
end
You might be interested in Yehuda’s take on this pattern. I think the reason for some of it is historical, since they’re not really needed unless you’re doing manually what Ruby will do automatically through
includeandextend.