Hoy estaba usando RailRoad para generar los diagramas de modelos y de controladores de un proyecto Rails en el que estoy trabajando y he visto que en la página de RailRoad venía el código (gracias a Thomas Ritz) de una tarea rake que genera los diagramas en svg y los deja en el directorio doc de la aplicación.
Como también quería que generase los diagramas en png la he modificado para que los incluya. Queda así (lib/tasks/diagrams.rake):
# Rake task tomada de la página de Railroad (http://railroad.rubyforge.org/)
# Gracias a Thomas Ritz por el código (http://www.galaxy-ritz.de/)
# Modificada por Amaia Castro (amaia@dabne.net) para incluir la generación de
# diagramas en png.
namespace :doc do
namespace :diagram do
task :models do
sh "railroad -i -l -a -m -M | dot -Tsvg | sed 's/font-size:14.00/font-size:11.00/g' > doc/models.svg"
end
task :models_png do
sh "railroad -i -l -a -m -M | dot -Tpng | sed 's/font-size:14.00/font-size:11.00/g' > doc/models.png"
end
task :controllers do
sh "railroad -i -l -C | neato -Tsvg | sed 's/font-size:14.00/font-size:11.00/g' > doc/controllers.svg"
end
task :controllers_png do
sh "railroad -i -l -C | neato -Tpng | sed 's/font-size:14.00/font-size:11.00/g' > doc/controllers.png"
end
end
task :diagrams_svg => %w(diagram:models diagram:controllers)
task :diagrams_png => %w(diagram:models_png diagram:controllers_png)
task :diagrams => %w(diagram:models diagram:models_png diagram:controllers diagram:controllers_png)
end
Para que funcione hay que tener instalada la gem railroad y, en Ubuntu (y otros linux supongo), el paquete graphviz, que es el que contiene dot y neato, para hacer la conversion de DOT a svg o png.
Luego en nuestra aplicación rails ejecutar rake doc:diagrams para generar todos los diagramas o rake doc:diagram:models para generar el de modelos en svg, por ejemplo.
Si al intentar instalar Rails en Ubuntu da un error como
$ sudo gem install rails
ERROR: While executing gem ... (Gem::Exception)
SSL is not installed on this system
es que hay que instalar libopenssl-ruby
$ sudo apt-get install libopenssl-ruby
Al menos así es como ha funcionado en mi viejo pc, al que le he regalado una instalación nuevecita de Rails por Navidad ;)
Esta mañana he estado pegándome con el plugin restful_authentication para que activase correctamente los usuarios. Por "suerte" Jaime estaba en las mismas y después de hablar un ratillo por jabber hemos conseguido que funcionase correctamente. Había que hacer un par de cosas que no están bien explicadas en la documentación del plugin y que hemos encontrado en los comentarios de la página del plugin en el directorio de plugins de agilewebdevelopment.com.
Dejo aquí apuntados los pasos para futura referencia.
Primero instalar el plugin:
$ script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/
Crear los usuarios y las sesiones con activación de usuarios con el generador que trae el plugin:
$ script/generate authenticated user session —include-activation
$ rake db:migrate
Añadir las rutas necesarias en config/routes.rb, según el README del plugin:
map.resources :users
map.resource :session, :controller => 'session'
map.signup '/signup', :controller => 'users', :action => 'new'
map.login '/login', :controller => 'session', :action => 'new'
map.logout '/logout', :controller => 'session', :action => 'destroy'
Y una que no viene en la doc pero que es necesaria para que funcionen los links de activación enviados por email.
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate'
Configurar ActionMailer para que envíe correo.
Poner las urls correctas para nuestra aplicación en app/models/user_mailer.rb. En lugar de ponerlas a pelo, se puede definir HOST en environment.rb con:
HOST = "localhost:3000"
y luego en app/models/user_mailer.rb poner:
@body[:url] = "#{$HOST}/activate/#{user.activation_code}"
Por último, no queremos que el usuario quede logueado al registrarse, si no ¿qué sentido tiene la activación? Para esto hay que comentar la línea que dice self.current_user = @user después de @user.save! en el método create de users_controller.rb:
def create
cookies.delete :auth_token
@user = User.new(params[:user])
@user.save!
# ** No logueamos al usuario hasta que se haya validado **
# self.current_user = @user
redirect_back_or_default('/')
flash[:notice] = "Thanks for signing up! Follow the instructions mailed to you to activate your account."
rescue ActiveRecord::RecordInvalid
render :action => 'new'
end
Una vez hecho todo esto no olvidar reiniciar mongrel y poner en controllers/application.rb
include AuthenticatedSystem
y en los controladores a los que se quiera restringir el acceso
before_filter :login_required
En Railscasts hay un episodio muy chulo sobre este plugin, y aunque no cubre la parte de activación de usuarios, está bien para ver como va la cosa.
Ya se ha comentado hoy que Rails 2.0 estaba a punto, que ya había tag 200 y el milestone 2.0 ya se había completado.
Pues bien, hace un rato, David lo ha publicado en Riding Rails, el blog de Ruby on Rails.
Corre a leerlo si quieres enterarte de todas las mejoras que tiene.
Y yo me acabo de bajar el pdf de Rails 2.0 de Peepcode gratis gracias a supercoco :)