Johann Hibschman <johann / physics.berkeley.edu> writes: > Now I want to call a magic procedure, like > > double_it(Test, "foo", "foo2") > > which would have the effect of doing > > class Test > def foo2 > foo > foo > end > end > > I can do > > Test.class_eval { > def foo2 > foo > foo > end > } > > to add methods, but I don't know how to write the method at run-time. You just did :) def double_it(klass, single, double) klass.class_eval %{ def #{double}(*args) #{single}(*args) #{single}(*args) end } end class Dave def hello(name) puts "Hello, #{name}" end end double_it(Dave, :hello, :moreHello) d = Dave.new d.moreHello("Johann") However, you could also have fun by making it a method of class Class: class Class def double(single, double) class_eval %{ def #{double}(*args) #{single}(*args) #{single}(*args) end } end end class Dave def hello(name) puts "Hello, #{name}" end double :hello, :moreHello end Dave.new.moreHello("Fred") Regards Dave