URL Validator en Rails

Hace un tiempo que he comenzado a estudiar Ruby on Rails, es algo que había puesto en espera durante mucho tiempo. Yo vengo de utilizar symfony para algunos proyectos en los que me he visto involucrado y al final me he acostumbrado bastante, porque de por sí symfony es un gran framework y ahorra muchísimo trabajo, desde los validators que ofrece hasta muchas de las funcionalidades como el Admin Generator que realmente son una pasada.

Pues bueno, la cosa es que necesité validar en Rails que una URL entrada por el usuario fuera válida, en symfony, para esto simplemente definía de la siguiente forma:


$this->validatorSchema['url'] = new sfValidatorUrl(array('required'=>true));
$this->validatorSchema['url']->setMessage('invalid', 'Please enter a valid web address (http://google.com)');

Esto lo ponía en el método configure() de la clase correspondiente a mi formulario y listo!.

En Rails, me encontré que esto no era tan sencillo, de hecho buscando en Google encontré varios ejemplos de personas que lo hacían utilizando expresiones regulares. Aunque esto para nada es extraño realmente no me gusta memorizar algo tan largo y buscando me encontré con esta otra alternativa, utilizando validates_format_of


validates_format_of :url, :with => URI::regexp(%w(http https))

La cosilla está en que el método regexp de URI admite como parámetros la lista de protocolos que deseamos que se validen y en función de esto genera las expresiones regulares correspondientes y por tanto validará todo lo que URI.parse sea capaz de parsear.

Advertisements