Validació de dates en Rails 3

Added by Oriol Gual on April 29, 2010 in rails3 ruby gems date validation activemodel
Imatge de flickr

Des de que han començat a sortir les primeres versions de Rails 3 hem estat jugant i provant-lo per a nous projectes. Amb un dels projectes necessitavem validar que unes dates fossin abans o després d'altres, així que seguint les guies de rails i algun post vam fer el nostre primer validator per Rails 3.

Us presentem date_validator

Tal i com diu la descripció al repositori de Github, es tracta d'un validador de dates molt simple. Per a instal·lar la gema només cal:

gem sources -a http://gemcutter.org # Si no ho heu fet abans
gem install date_validator

La única dependència que té és ActiveModel, o sigui que tan ho podeu fer servir en models de Rails 3 com en qualsevol classe (incloent-hi ActiveModel, és clar), i tot d'una manera molt senzilla:

validates :expiration_date, :date => { :after => Time.now, :before => Time.now + 1.year }

Les opcions que hi ha disponible per ara són:

:after
:before
:after_or_equal_to
:before_or_equal_to

No cal explicar per a què serveix cada opció, no?

No oblidem els tests: remarkable_date_validator

I per últim, però no per això menys important, si feu servir Remarkable (concretament el fork per Rails 3) instal·leu també la gema amb els matchers pel remarkable:

gem install remarkable_date_validator

I al specs dels vostres models:

should_validate_date_of :expiration_date, :date => {:after => Time.now, :before => Time.now + 1.year}

Algú s'anima a fer un fork amb matchers per shoulda?