4Trabes Historias de una empresa en 100 metros cuadrados

El blog de Trabe Soluciones

delegate_method versión 2

|

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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


Lo sentimos, pero los comentarios están cerrados