Archivo del Autor de jenaiz

Implementando la gestión de usuarios

Sin lugar a dudas, Dani ya os puso sobre la pista de nuestra idea de la gestión de usuarios en cuanto a Flatee. Y de qué manera era necesario tenerla. De tal forma que no voy a entrar en esto, sino más bien en cómo la estamos implementando.

Siguiendo el principio DRY, hemos utilizado el ya ampliamente conocido plugin restful_authentication. Desde hace algún tiempo este plugin se encuentra alojado en github, lo que ha servido para que algunos miembros del equipo trabajen con git, un añadido más.

Nuestra primera misión fue instalar git en nuestras máquinas para poder funcionar con él. En mi caso, ha sido bastante sencillo hay disponible una imagen para instalar en Mac OS X, por lo que la instalación ha sido un click detrás de otro, un simple reinicio del terminal y funcionando.

Luego para descargar el plugin desde github con git, nos basta con:

git clone git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful-authentication

Por otro lado al descargar la versión de restful_authentication, dado que es la última sufrimos algunos problemas, que os queremos detallar.

Lo fundamentarl ahora es generar con el plugin nuestra cuenta de usuario:

./script/generate authenticated user sessions --include-activation --stateful --rspec

las opciones que incluimos detalladas nos dan:

  • include-activation: con esto se generará un ActionMailer que nos permitirá enviar el mail de activación a los usuairos implicados.

  • stateful: da soporte al plugin: acts_as_state_machine que generara el código de activación.

  • rspec: Genera test Rspec y Stories en lugar de los tradicionales test de rails.

Existen más posibilidades, sin embargo para nosotros estas eran las necesarias.

Tras ejecutar esto, el plugin nos recomienda una serie de pasos a seguir, el primero de ellos, debemos añadir un observer al config/environment.rb:

config.active_record.observers = :user_observer

Lo siguiente es instalar acts_as_state_machine, para ello:

svn export http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk vendor/plugins/acts_as_state_machine

Debemos añadir las siguientes rutas a config/routes.rb:

map.signup '/signup', :controller => 'users', :action => 'new'
map.login  '/login',  :controller => 'sessions', :action => 'new'
map.logout '/logout', :controller => 'sessions', :action => 'destroy'
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => nil

y modificar la existente creada por el plugin de usuarios:

map.resources :users, :member => { :suspend => :put, :unsuspend => :put, :purge => :delete }

Al modelo de usuario hay que añadirle los estados que va a utilizar el plugin acts_as_state_machine:

acts_as_state_machine :initial => :pending
state :passive
state :pending, :enter => :make_activation_code
state :active,  :enter => :do_activate
state :suspended
state :deleted, :enter => :do_delete

Como nota importante, decir que tuvimos que añadir unas líneas al init.rb del plugin, por unos errores que obteníamos de métodos ‘undefined’:

require File.dirname(FILE) + ‘/lib/authorization’
require File.dirname(FILE) + ‘/lib/authorization/stateful_roles’

Tras esto enviamos un mail al autor del plugin, por lo que consideramos es un error para que pudiese incluirlo en el repositorio y quedase corregido.

Liberar el código de Flatee

YAVisitor en nuestra entrada de bienvenida, nos sugiere liberar el código de flatee. La verdad es que la propuesta ha llegado demasiado temprano dentro de nuestras labores y en nuestras conversaciones no nos habíamos planteado esta opción.

Tanto nosotros como Linking Paths sabemos lo que es liberar código y participamos del movimiento open source. La lista de iniciativas que hemos creado o en las que participamos activamente es larga:

  • Casi todos hemos trabajado en JavaHispano, una comunidad que aboga por el open source y que es un recurso indispensable de noticias y artículos dentro del mundo java. De hecho, es la comunidad java de habla hispana más grande del mundo.

  • Proyectos open source de todo tipo: cáñamo, licurgo, belegost, jLibrary, …

  • Incluso en estos momentos estamos implicados en el desarrollo de proyectos basados en Tog, la plataforma de redes sociales, que en breve verá la luz y que desde el principio fue concebida como open source).

  • Por último, pero no menos importante, mi compañero Dani participa en estos momentos en el Google Summer of Code, tratando de crear un plugin para Grails, el cual está bajo licencia Apache, o sea libre.

flatee nace, sin dudarlo, con intención de convertirse en el servicio de alquiler de pisos compartidos referente en el mercado latino.

Si analizamos los proyectos open source de mayor éxito veremos que la gran mayoría son productos y herramientas más o menos genéricas capaces de albergar un comunidad de desarrolladores. Cada miembro de la misma puede utilizar y adaptar el software para sus propios proyectos y servicios. Las mejoras surgidas de esa adaptación pueden revertirse a la comunidad y cerrar el ciclo. Ese es el flujo que normalmente acontece en los proyectos open source y, francamente, no creemos que flatee sea un caso similar.

Sin embargo, hay otro foco de creación de proyectos open source que tiene su origen en las mejoras que acabamos de citar. Cuando estas son de un volumen respetable o forman un conjunto lógico lo suficientemente grande son encapsuladas de diferentes maneras: librerías, plugins, gemas, etc. Por ahí sí que podríamos encontrarnos con cosas liberadas bajo el paraguas de flatee, tal y como ya hemos hecho en el pasado, dado que son piezas que podríamos considerar reutilizables y beneficiosas para otros.

Finalmente y como ya hemos comentado, tenemos la intención de ir relatando los problemas con los que nos encontremos a nivel técnico dentro del desarrollo, lo cual hace que se pueda aprender de nuestra experiencia a la vez que podáis orientarnos entorno a determinados problemas que puedan surgir.