delegate_method versión 2
Publicado por el Jueves, 17 de Abril de 2008
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

Tu comentario