From: Kevin Mahler Date: 2011-04-15T16:14:37+09:00 Subject: Re: looking for an "inversion" pattern Fearless Fool wrote in post #992929: > I'd like to create a method +foo+ that transforms: > > my_obj.foo.some_method(*args) > > to > > MyClass.some_method(my_obj, *args) class MyClass def self.some_method(obj, *args) puts "MyClass.some_method:" puts "obj: #{obj.inspect}" puts "args: #{args.inspect}" end end def define_foo(obj, clazz, method) obj.singleton_class.class_eval do define_method :foo do Class.new do define_method method do |*args| clazz.send(method, obj, *args) end end.new end end end my_obj = "my_obj thing" args = [1,2,3] define_foo(my_obj, MyClass, :some_method) my_obj.foo.some_method(*args) # => # MyClass.some_method: # obj: "my_obj thing" # args: [1, 2, 3] Returning facade or proxy objects like this can be an elegant solution to certain problems. It's rather high on the abstraction ladder, though, and without knowing the context I would wonder if more direct solutions are possible. -- Posted via http://www.ruby-forum.com/.