Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
require 'rubygems' require 'parse_tree' require 'sexp' class UnboundMethod def binding_class @class_name || @class_name = begin to_s =~ /\#\<UnboundMethod\:\s(\w+)/ Object.const_get($1) end end def name @name || @name = begin to_s =~ /\#\<UnboundMethod\:\s\w+\#(\w+)/ $1.freeze end end def parameters @parameters || @parameters = begin params, sexp = [], Sexp.from_array(ParseTree.new.parse_tree_for_method(binding_class, name)) sexp.each_of_type(:args) {|a| params = a.sexp_body.to_a } params end end end class Application < Merb::Controller def self.inherited(base) super memo = Hash.new() { |h,k| h[k] = base::instance_method(k).parameters } base.instance_variable_set("@parameters_for_action", memo) end def self.parameters_for_action(action) @parameters_for_action[action] end def call_action(action) send(action, *self.class::parameters_for_action(action).map { |name| params[name] }) end end
This paste will be private.
From the Design Piracy series on my blog: