From: Daniel Schierbeck Date: 2005-12-03T00:02:37+09:00 Subject: Re: Dynamic Modules Trans wrote: > I would like to discuss the merits/non-merits and the best approach to > implementation of "dynamic modules" --modules that take parameters at > the time of include, thus altering their behavior per include. The > common denominator here is the altered interface of #include: > > include AModule, :opt1 => :val1, :opt2 => :val2 > > Here's a simple example based on the implementation I (and friends) put > together > > module Mixin > > dynamic_feature do |options| > > define_method :hello do > puts "Hello from #{options[:name]}" > end > > end > > end > > class MyClass > include Mixin, :name => 'Ruby' > end > > m = MyClass.new > m.hello -> 'Hello from Ruby' > > class MyClass2 > include Mixin, :name => 'Tom' > end > > m = MyClass2.new > m.hello -> 'Hello from Tom' > > T. > I'd rather see this: class Module def include(mod, *args, &block) mod.send :append_features, self if mod.respond_to? :included mod.included(self, *args, &block) end end end module Chewable def self.included(klass, *args) puts "Included in #{klass} with the following args:" args.each { |arg| puts " * #{arg.inspect}" } end end class Klass include Chewable "foo", "bar", "baz" end Cheers, Daniel