Archive for the ‘Ruby on Rails’ Category

Plugin: Will Static Generator

Martes, Junio 23rd, 2009

Mi primera aportación, pese que aún tiene margen de mejora, es will_static_generator: Plugin que genera la lógica que gestiona las páginas estáticas de un proyecto y con algunos steroides:

  1. Poder elegir entre ERB o HAML como lenguaje de marcado para las páginas que generemos.
  2. Disponer de un subnivel: /mi-empresa/quienes-somos, /mi-empresa/servicios,…
  3. O de i18n.

En estos dos últimos puntos es donde considero el margen de mejora, los subniveles deberían poder ser indefinidos y en cuanto al i18n pensar, tal vez, en otras estrategias más potentes que la integrada en Rails.

Podéis ver más aquí: http://github.com/nickel/will_static_generator/tree/master

template_exists? deprecated en Rails 2.3

Domingo, Abril 5th, 2009

No sé ahora mismo de donde saqué este snippet para volver a disponer de esta pequeña funcionalidad: conocer si existe una vista. La he vuelto a recuperar de un proyecto y dado que mi blog en mi poco extenso blog es más facil de encontrar, me lo apunto por aquí:

  # Define template_exists? for Rails 2.3 (cause it's deprecated)
  unless ActionController::Base.private_instance_methods.include? 'template_exists?'
    def template_exists?(path)
      self.view_paths.find_template(path, response.template.template_format)
    rescue ActionView::MissingTemplate
      false
    end
  end

Poco rato después…

Googleando un poco he dado con la fuente: Drachenkind. Thx!

Rails & Breadcrumbs

Sábado, Agosto 9th, 2008

Después de muchos proyectos y aplicar muchas formas para resolver el asunto del Breadcrumb (las “migas de pan” que suele aparecer en la parte superior para facilitar la navegación), me decidí en busca de alguna alma gemela – no voy muy sobrado de tiempo – que hubiese dado una solución óptima.

Y vaya que si lo encontre: http://szeryf.wordpress.com/2008/06/13/easy-and-flexible-breadcrumbs-for-rails/

Aún no la he llevado al límite pero me está pareciendo de lo más práctico y sencillo. Gracias szery.

Gem: cheat –execute

Miércoles, Agosto 6th, 2008

La última actualización de la gema cheat, una utilidad que nos trae referencias e información sobre otras utilidades directamente a nuestra consola, trae una nueva opción realmente curiosa: –execute o –x, que se aprecia con un ejemplo:

cd /some/dummy/rails/project
cheat install_rspec_rails -x

# This is to install the latest rspec/rspec-rails into
# a rails project.
script/plugin install git://github.com/dchelimsky/rspec.git
script/plugin install git://github.com/dchelimsky/rspec-rails.git
script/generate rspec

Would you like to execute the above sheet? (Y/N)

En caso afirmativo, nos ejecutará todo las sentencias que nos propone. Para disponer de ello, tendremos que instalar la versión “trunk” que se encuentra en github:

git clone git://github.com/zdennis/cheat.git
cd cheat
rake package
sudo gem install pkg/cheat-1.2.2.gem

Viviendo en el Edge: Piloto

Lunes, Mayo 12th, 2008

Desde hace bastante me han ido llegando al Reader™ los cambios que se van incluyendo a lo último de Rails, cambios aún no “tangibles” y que si no lo trabajas día a día, no le vas echando caso alguno..

Así que nada, aunque el asunto ya lleva bastante tiempo (va por la entrada #20), poco importa, ya que de momento todo son cosas que no están en la calle de manera oficial. Me uno a los amigos franceses aunque no pretendo hacer una traducción ni literal ni completa (ojala tuviese el tiempo).

En fin, empezemos: Cambios del 17-12-2007 al 30-12-2007.

Manejador nativo mongrel

Rails llevará un Mongrel interno de manera nativa e independiente al desarrollo del Mongrel original. Dicho manejador de peticiones interno contará con la ventaja de no tratar las peticiones a nivel del Dispatcher sino de aplicación, con lo que estaríamos cerca de tener algo threadsafe en nuestras aplicaciones Rails.

Hacia la compatibilidad con Ruby 1.9..

El trabajo hacia la compatibilidad de Rails con la 1.9 sigue viento en popa, gracias a los incodicionales que están detras del framework aportando sus contribuciones a la causa. Con esta nueva versión de Ruby podremos olvidarnos de problemas con el encoding, nuevas sintaxis,.. pero que de momento de poco sirven mientras Mongrel no sea el primero que del el paso hacia la 1.9.

Optimizaciones

Muy interesesante para dos Flowers:

La mejora de decodificación JSON tanto para ActiveRecord (placechannel.com) como para ActiveResource.

Enviar email a través de gmail generando y adjuntando un PDF

Domingo, Marzo 30th, 2008

Con esta tarea me ví envuelto una mañana y que, gracias a la buena documentación internauta, fue menos doloroso de lo que en un principio pensé. No he hecho un paso a paso porque me parece tan simple que es mejor verlo, probarlo uno mismo y sacar tus propias conclusiones en local con todo montadito. Eso sí, os dejo algunas indicaciones de algunos detalles que hay que configurar.

El tema del PDF lo solucioné gracias a la ayuda de Dagi3d y Flying Saucer: Un generador de PDFs a través de XHTML y CSS la mar de sencillo hecho en JAVA.

A configurar solo tendreis que, en config/initializers/gmail_conf.rb, indicar las credenciales de la cuenta de gmail desde donde se enviarán los emails (:user_name y :password). Y en config/initializers/java_conf.rb deberemos indicar el path hasta nuestro directorio java.

Como me molesta mucho que las aplicaciones perezcan en el tiempo por colgarlo en hostings personales y demás, la cuelgo en Google Code que seguro que perdurá por los siglos de los siglos, ¿verdad n3uro5i5? :P

Descárgatelo en Google Code

scRUBYt!: WWW::Mechanize && Hpricot on Steroid

Domingo, Marzo 16th, 2008

Lo que empezó como una curiosidad se ha convertido en mi día a día. Eso sí, tirando de una opción de “alto nivel” en este mundo del Web Scraping: scRUBYt!

Esta herramienta nos da muchisimas posibilidades. Ya sea obtener resultados a través de terceras páginas (resultados Google, la temperatura de una localidad a través de Instituto Nacional de Meteorología,…) y crearnos un bonito mashup. Acceder al deep web, la información de sus bases de datos, de las aplicaciones web que nos interesen. Imaginación al poder.

Todo esto lo podremos hacer con las dos funciones fundamentales de scRUBYt!: navegar: traerse la página, clickar enlaces, rellenar inputs, traerse resultados paginados,… y hacer scraping sobre la información obtenida.

La primera de ellas lo consigue con WWW::Mechanize, el motor de navegación, el cuál tiene un buen problema a expensas de ser pronto solucionado: no interpreta el código Javascript. Hasta que esto cambie tenemos una alternativa: FirescRUBYt! (scRUBYt! y Firewatir), que suplirá dicha deficiencia usando Firefox para navegar (con JS, claro) y traerse la información (prometo escribir sobre como hacer funcionar toda historia).

Por otro lado, aunque el resultado del scraping lo podemos obtener en diferentes formatos, el más común es XML que, tratado con HPricot, hacen que trabajar con los resultados sea muy sencillo.

La verdad es que esta herramienta me ha permitido llegar de manera rápida y sencilla a toda la información que he necesitado de las aplicaciones web, aunque durante el desarrollo he echado bastante en falta que el metodo next_page funcionase (espero que en una pronta versión lo venga haciendo :-).

Os dejo mi ejemplillo de traductor con scRUBYt!
scrubyt rails ruby ror
Copialo

Enlaces de interés:
WebWikiForo
http://www.rubyrailways.com/data-extraction-for-web-20-screen-scraping-in-rubyrails-episode1/

Flowers’ Plugins

Jueves, Noviembre 1st, 2007

El control de mando está últimamente muy activo creando misiones espaciales, misiones que necesitan su primera puesta a punto: generación, sus primeros ignores, sus primeros plugins,.. Despues de ir generando varios de ellos, te das cuenta de que ya eres incapaz de entender Rails sin muchos de estos plugins.

Imprescindibles

HAML: La manera más DRY de escribir nuestro código XHTML (markup haiku ;P). Pros: A la hora de codear es limpio y claro, al igual que el código generado. Si trabajas en equipo se mantiene una regla de escritura implicita. Contras: Por esto último puede que al principio sea una lata adaptarse a dichas reglas. Extra: Soy FAN number One de Hampton Catlin y su equipo ;D

rSpec: Testeando nuestro código a través de su comportamiento (BDD). Pros: Usarse debería ser una obligatorio, los pros son tantos.. Contras: Las mayoría de las soluciones testing se basan en TDD. La curva de aprendizaje es lenta.

restful_open_id_authentication: Una versión de restful_authentication con OpenID. Pros: Ofreces OpenID en tu aplicación en un visto y no visto. Contras: Al no ser una versión de la más populares no sé hasta que punto se mantendrá actualizado.

WillPaginate: Con un ojo al frente y otro a err_the_blog :P Pros: ¿Hay paginación más sencilla? Contras: En alguna que otra situación se nos queda corto: Paginar arrays (googleando se encuentra la solución a esto), forms,..

Grandes compañeros de viaje

annotate_models: ¿Que campos tiene este modelo? No más viajes a la BD para recordarlos. Toda la información en nuestros modelos y fixtures.

exception_notification: Enterate antes que el jefe o el cliente que la aplicación tiene fallos de programación. Todos los fallos generados a tu correo al instante.

acts_as_state_machine: Modelos actuando como una máquina finita de estados. Permite, entre otras cosas, lanzar metodos asociados a un tipo de cambio de estado. Genial.

upload_column: Para subir nuestros ficheros, imagenes,.. asociadas a un modelo. Este es el tercer plugin con esta finalidad que hemos usado y el más práctico con diferencia.

Hay alguno más pero con misiones muy puntuales y que por ahora no viajan lo suficiente como para estar por aquí ;)