Un semplice plugin ‘act as…’ per Ruby on Rails

7 aprile 2009

Se esploriamo Rails Lodge, uno dei più famosi repository di plugins per Rails, noteremo che una buona percentuale delle estensioni presentate hanno un titolo del tipo: ‘Acts As …’.

I primi due esempi di questo strano e originale “behavior” sono da ricercarsi in ‘Acts As List’ e ‘Acts As Tree’, all’epoca non propriamente plugins (ora lo sono diventati) ma parte integrante del core di Rails.

Il concetto base che sottende tutti questi prodotti, suggerito proprio dalla particella ‘Acts As’, (cioè ‘Agisci Come’), è quello di ‘trasformare’ il funzionamento di uno (o alcuni) models della nostra applicazione facendoli agire come liste (nel caso di Acts As List), come valute (Acts As Currency), o come un qualiasi altro comportamento voluto, attraverso l’utilizzo di una ‘macro’ che deve essere inserita all’interno dell’oggetto interessato come nell’esempio sottostante:

class Todo < ActiveRecord::Base
  acts_as_list
end

Nella pratica acts_as_list è una funzione che il plugin inietta (attraverso il suo init.rb) all’interno della classe ActiveRecord::Base rendendola di fatto disponibile a tutti i models.

Tale funzione ha il solo scopo di rendere disponibili, alla classe che la implementa, tutta una serie di metodi caratteristici di un particolare oggetto (ad esempio acts_as_list aggiunge metodi quali higher_item, move_lower, etc.) nonché di modificare alcuni dei comportamenti classici di un model (ad esempio Acts As Paranoid sovrascrive il metodo destroy della classe che lo implementa impedendo il cancellamento fisico di ogni suo record).

La chiave di questo funzionamento risiede nell’utilizzo sapiente dei Mixins, oggetto della prima sezione di questo articolo.

Se vuoi aggiornamenti su Un semplice plugin 'act as...' per Ruby on Rails inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Un semplice plugin 'act as...' per Ruby on Rails

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy