I always make confusion, although I'm getting better, this should help:
module MainMod
module SubMod
def self.included(cls)
puts "#{self} included in #{cls}"
cls.extend ClassMethods
end
module ClassMethods
def ext
puts 'extended'
end
end
def inc
puts 'included'
end
end
end
class A
include MainMod::SubMod # => MainMod::SubMod included in A
end
A.new.inc
A.ext
module Mod1
inc MainMod::SubMod
end
class B
inc Mod1 # => MainMod::SubMod included in Mod1 !!!(Mod1)
end
B.new.inc
# B.ext # does not exists, `ext` was extended on Mod1