acts_as_wheel_inventorRubén Medellín
(@chubas)Pio.la on Rails
Plugins
Módulos funcionales de una aplicación
Diferentes a las gemas en que éstos solo son accesibles a la aplicación que los utiliza
Diferentes al directorio /lib en que son componentes reusables, e incluyen funcionalidad extra
Bajo acoplamiento, alta cohesión Debe hacer una sola cosa - y nada
más - y ser independiente de los demás módulos
Filosofía Rails
DRY Don’t reinvent the wheel Convention over configuration Complex framework, easy logic
Monkeypatching
Si uno hace plugins embebidos directamente en uno de los componentes Rails, debe tener cuidado de no alterar la funcionalidad existente, o causar conflictos.
Realización de un plugin
script/generate plugin
Realización de un plugin
Pruebas! Documentación! Distribúyelo!
Anatomía de un plugin
install.rb uninstall.rb
Anatomía de un plugin
init.rbPlugin loaderSe puede definir el orden de los
plugins, al igual que con las gemas
Anatomía de un plugin
libContenido va aquíSi es grande, separar (usualmente: rails
-> app, models, views, helpers) tasks
Rakefiles generators
generators / destroyers, y templates tests
Pruebas funcionales, de vistas, etc.
Ejemplo
http://github.com/chubas/birthday_countdown
Ejercicio para el lector
Modificar el plugin, de tal manera que se pueda especificar el nombre del campo, y no acepte solamente :birthday
El modelo puede quedar algo así:class Event counts_days_to :inauguration_dateend
Gracias