Some metaprogramming with define_method

Hello,

I was hoping that the following snippet would output

test_method

instead it raises an ‘undefined method’.

module Proxy

def self.append_features(mod)
  mod.extend(ClassMethods)
end

module ClassMethods

  def proxy_method(name)
    self.class.send(:define_method, name) { puts "called #{name}" }
  end

end

end

class ProxyTest

include Proxy

proxy_method :test_method

end

proxy = ProxyTest.new
proxy.test_method

Any hints greatly appreciated.
g phil

On Apr 24, 2008, at 23:26, Philipp H. wrote:

def self.append_features(mod)
mod.extend(ClassMethods)
end

module ClassMethods

 def proxy_method(name)
   self.class.send(:define_method, name) { puts "called #{name}" }

Here you’re in class scope; self points to ProxyTest. You in essense
defined Class.test_method. Remove “.class”, and it works.