L-exp Mobile

Hyperdelegate

Disponible en sabor mini-plugin y en sabor Rails patch.

Se trata de una pequeña mejora al método delegate (ya sabes, ese arma casi imprescindible en la eterna lucha contra Demetrio), que incorpora un par de patrones bastante frecuentes.

Para los despistados, delegate es un método incluído en ActiveSupport que permite, eso, delegar un método en otro objeto, por ejemplo:

class Address < AR::B # has attributes street and number end class Person < AR::B has_one :address delegate :street, :number, :to => :address end Person.find(1).street # 'General Patton'

Sin embargo esto es un poco limitado y con frecuencia nos encontrábamos sustituyéndolo por algo más engorroso para cosas sólo levemente más complejas:

class Person def town address.city end end

ó:

class Person def street address && address.street end end

Éste último en particular es un patrón bastante habitual. Y además es algo que preocupa a más gente porque sin buscar demasiado hemos encontrado dos propuestas de solución.

Con Hyperdelegate, estos dos ejemplos quedarían reducidos a:

class Person delegate :town, :to => :city, :target => :city delegate :street, :to => :address, :allow_nil => true end

Como digo aparte del miniplugin hemos propuesto esta mejora al core de Rails así que si la probáis y os funciona bien y os mola votadla para que entre .



Options:   Save This | Share
Viewed 3 times
Published 3 months ago
By
From Resource Sergio Gil in lists:
Conferencia Rails Hispana '07

Menu

by Genís