Hace tiempo propusimos desde este blog el método Module::delegate_method como sustituto del método delegate de Rails.
El tiempo ha pasado y después de usarlo mucho hemos decidido simplificarlo, cambiar su sintaxis y, como entonces, ponerlo a disposición de todo el que lo quiera usar.
class Module # # delegate_method :do_something, # :to => :other_object # # delegate_method :do_other_thing, # :to => :another_object, # :as => :do_something, # :default => "Can't do it" # def delegate_method(method, options) to = options[:to] as = options[:as] || method default = options[:default] raise ArgumentError(':to param is mandatory') if to.blank? module_eval %{ def #{method}(*args, &block) #{to}.__send__(:#{as}, *args, &block) || #{default.inspect} end } end end