If we define Module#include as:
class Module
alias _include include
def include(*mods)
mods.each do |mod|
if mod.const_defined?(:Self)
extend mod::Self
# pass it along if module
if instance_of?(Module)
const_set(:Self, Module.new) unless const_defined?(:Self)
const_get(:Self).send(:include, mod::Self)
end
end
end
_include(*mods)
end
end
Example:
module X
def x; "x"; end
module Self
def q; "q"; end
end
end
class C
include X
end
C.q #=> "q"
Benefits:
* Documents well in RDoc
* Fairly concise and clear
* Self module fits in well with "class << self"
* No callbacks used.
T.