Reimplementing Module#include
method (my_include method
):
my_include
takes one or many modules- it goes on a reverse traversal and for each module it adds its features to
self
- calls an home-made hook method
class Module
def my_include(*modules)
modules.reverse_each do |each_module|
each_module.send(:append_features, self)
each_module.send(:my_included, self)
end
end
def my_included(base)
# void implementation
end
end
module OneModule
def self.my_included(base)
puts ".........including from #{base}"
end
def ciao
puts "ciao!"
end
end
class MyClass
my_include OneModule
end
c = MyClass.new
c.ciao