From: Alexey Petrushin Date: 2011-10-31T03:42:28+09:00 Subject: How to save method signature while wrapping it? Hello, it would be interesting to automatically destruct hashes into named method arguments, Ruby has the Method.parameters method: class A def my_method a, b, c = 10; end p instance_method(:my_method).parameters # ==> [[:req, :a], [:req, :b], [:opt, :c]] end So, You can use this method signature to automatically destruct hash into named arguments, something like this: A.new.send_with_params :my_method, a: 'a', 'b': 'b' And it works. But, there's a problem - all this is broken when You wrap method (like `alias_method_chain` or some other way) - the signature of the original method is losted: class A alias_method :my_method_without_feature, :my_method define_method :my_method do |*args| my_method_without_feature *args end p instance_method(:my_method).parameters # ==> [[:rest, :args]] end So, I'm wondering, maybe there's some way to wrap method and still preserve its signature? Basically attribute names are available (from method.parameters), but I don't know how to express named attributes in block signature, i.e. - how to dynamically write `... do |args[1], args[2], args[3]|` instead of `... do |*args|` (without eval of course :) ). Thanks, Alex. http://petrush.in P.S. if someone interested how to do :send_with_params here's full code and specs (search for send_with_params keyword): https://github.com/alexeypetrushin/ruby_ext/blob/master/lib/ruby_ext/core/object.rb https://github.com/alexeypetrushin/ruby_ext/blob/master/spec/core/object_spec.rb -- Posted via http://www.ruby-forum.com/.