desarrollamos comunidades y redes sociales verticales

Emergia-on-rails2
Emergia-on-rails1
Blog de Emergia On Rails

La magia del render layout

0
Publicado por esaborit4code el 18 de Diciembre de 2013

A petición de @jguitar_, voy a contar el truco que aprendí el otro día y que os puede ayudar a aplicar DRY en las vistas.

Para los ejemplos voy a usar HAML, ya que es lo que usamos nosotros para nuestras vistas. Con ERB también se puede hacer, pero tendréis que cambiar la sintaxis.

El problema

Para poneros en contexto, os enseño el diseño de la página que tuve que maquetar:

Un layout muy mono.

Como podéis ver hay un patron que se repite tres veces. Para los de la ESO lo voy a indicar con un recuadro discontínuo rojo:

Marcado para la ESO.

Básicamente el patrón consiste en una cabecera con un número, un título y una caja blanca de contenido variado.

La solución: render layout

En esta ocasión, necesitamos que a un partial le lleguen las variables con el numerito y el título, pero además un bloque de HAML que será renderizado en su interior.   Leer más La magia del render layout

Etiquetas: render · layout · rails · haml · DRY · vistas · views

Primer encuentro de Ruby en Valencia: Valencia.rb

2
Publicado por jguitar el 23 de Septiembre de 2013

El próximo martes 24 de Septiembre vamos a reunirnos en Workether.

Llevaba tiempo observando y aprendiendo de la comunidad de Madrid.rb y recientemente veía por Twitter como Zaragoza.rb también empezaban a organizarse y a ir haciendo quedadas, charlas y conociéndose. Así que, con la envidia de querer que algo así sucediese en Valencia, empecé a tantear primero a compañeros del trabajo y después también a través de Twitter quiénes estarían dispuestos a unirse.

No somos muchas las personas que trabajamos con Ruby en Valencia, pero estoy seguro que somos más de los creemos:

Personalmente conozco a:

Y de oídas sé que PlayJugo, OnBuyWeb, Axtro y Logica2 también trabajan en Rails en Valencia.   Leer más Primer encuentro de Ruby en Valencia: Valencia.rb

Etiquetas: ruby valencia

Avanzando con pluralize, inflectors, I18n y demás

0
Publicado por jguitar el 11 de Septiembre de 2013

Queremos crear la tabla (y un nuevo modelo) para "planes de pensiones". Palabra compuesta y además complicada porque:

  • Singular: plan de pensiones
  • Plural: planes de pensiones

Lo primero que se me ocurrió para que todo fuese sobre ruedas fue meterlo en inflectors.rb

inflect.irregular 'plan_de_pensiones', 'planes_de_pensiones'

Pero al usar:

rails g scaffold PlanDePensiones nombre:string ...

No funcionaba porque creaba cosas como:

app/models/plan_de_pensione.rb
app/assets/javascripts/plan_de_pensiones.js.coffee
app/assets/stylesheets/plan_de_pensiones.css.scss
app/controllers/plan_de_pensiones_controller.rb
app/decorators/plan_de_pensione_decorator.rb
app/helpers/plan_de_pensiones_helper.rb
app/models/plan_de_pensione.rb
app/views/plan_de_pensiones/
db/migrate/20130911084339_create_plan_de_pensiones.rb
spec/controllers/plan_de_pensiones_controller_spec.rb
spec/decorators/plan_de_pensione_decorator_spec.rb
spec/helpers/plan_de_pensiones_helper_spec.rb
spec/models/plan_de_pensione_spec.rb
spec/requests/
spec/routing/plan_de_pensiones_routing_spec.rb
spec/views/

El modelo debería haber sido "plan_de_pensiones.rb" y, sin embargo, ha creado "plan_de_pensione.rb"   Leer más Avanzando con pluralize, inflectors, I18n y demás

Etiquetas: rails · I18n · routes

A buen entendedor pocos tests bastan

0
Publicado por esaborit4code el 29 de Julio de 2013

El viernes, durante un refactor en nombre del SRP, moví una función del modelo Usuario al concern Suscriptores, lugar al que realmente pertenecía.

Al tratar de mover el test unitario que comprobaba el funcionamiento de dicha función, me topé con varios problemas hasta que acabé consultando con el señor jguitar para ver si entre los dos lo sacábamos.

¿La solución? Eliminar el test.

Algunos dirán "WTF!? Sois una panda de negligentes, ¡estáis cargándoos la cobertura de tests por algo que no sabéis hacer!".

Pues bien, aunque pueda sonar a excusa por no saber hacer, creo que la conclusión tiene buena argumentación.

La clave está en ser consciente de que haciendo TDD escribes los tests que guían o "sujetan" el desarrollo/refactor que tienes entre manos y que algunos de estos tests solo tienen sentido durante el proceso del red, green, refactor. De hecho, en varios sitios he visto nombrados este tipo de tests como scaffolding (o andamiaje, en castellano), haciendo referencia al recurrente símil entre desarrollo de software y construcción de edificios.   Leer más A buen entendedor pocos tests bastan

Etiquetas: testing · TDD · scaffolding

Usando filtros AROUND en los tests - el ejemplo que falta en la documentación oficial

0
Publicado por Fernan2 el 22 de Julio de 2013

Los filtros around vienen descritos en la documentación y en las especificaciones con estos ejemplos: around(:each) do |ex| # do some stuff before ex.run # do some stuff after end describe "around filter" do around(:each) do |example| puts "around each before" example.run puts "around each after" end it "gets run in order" do puts "in the example" end end

Así, si yo quiero correr un test de capybara con un dominio concreto (y luego restaurar el dominio por defecto), puedo optar por hacerlo con un before + after: before { capybara_en_dominio('www.rankia.cl') } after { restaura_capybara } it "debe integrarse bien con la plantilla de latam" do ... end

O puedo usar un around: around do |codigo_del_test| capybara_en_dominio('www.rankia.cl') codigo_del_test.run restaura_capybara end it "debe integrarse bien con la plantilla de latam" do ... end   Leer más Usando filtros AROUND en los tests - el ejemplo que falta en la documentación oficial

Características de TextMate 2 (editor para Mac OSX)

0
Publicado por jguitar el 10 de Julio de 2013

Hace un par de semanas empecé a probar TextMate 2. ¡¡Sí!! Existe, no era una leyenda urbana. Y me ha sorprendido bastante.

Aquí en la oficina el editor por excelencia es TextMate 1.5, un editor potente para MacOSX y que fue la herramienta de facto para programar Rails. Aunque a ratos a mí me gusta practicar con MacVim y vim (pero estoy lejos de sacarle provecho). Llevaba tiempo pensando en cambiar de editor, y en el horizonte estaba la posibilidad de SublimeText2 pero gracias a Marc descubrimos que TextMate 2 existía. Así que le di una oportunidad.

Y después de dos semanas esto es lo que he comprobado.

Cosas guays:

  • El drawer ha mejorado considerablemente
    • Poder “abrir” una carpeta y marcarla como “Project Folder”. Una manera muy cómoda de focalizar y restringir las búsquedas.
    • Los iconos muestran el estado de los ficheros en git
    • Puedes duplicar un fichero
  • Los ficheros que están en formato markdown se visualizan casi con WYSIWYG
  • Las nuevas y abundantes opciones de configuración
  • Que por defecto mantenga los ficheros abiertos (que estaban al cerrar) cuando abrimos la aplicación  (incluso el despliegue del drawer).
  • La selección de varias líneas, pulsar Alt y que se pueda editar de una forma maravillosa. Esta es sin duda una de las mejoras features (he dejado de usar las macros para editar cierta cantidad de información)
  • La nueva gestión de los bundles
  • La actualización constante de las nightly builds
  • ¡¡Hey!! Es Open Source: https://github.com/textmate/textmate
  • Quitar espacios sobrantes al final de línea ya no es un bundle, aunque hay que configurarlo
  • Replace masivo en las búsquedas, que además permite seleccionar en qué ficheros

Cosas que no me gustan:   Leer más Características de TextMate 2 (editor para Mac OSX)

Construcción try en Rails, para preguntar si algo existe

3
Publicado por jguitar el 21 de Mayo de 2013

En algunas ocasiones acabas haciendo que objetos llamen a propiedades de otros objetos. Por ejemplo:

objeto.otro_objeto.length

Y claro, como otro_objeto sea nil te enfrentas a una excepción. La primera opción que se te ocurre es con un bonito if:

if objeto.otro_objeto
  objeto.otro_objeto.length
end

También, en modo locura-total se te podría ocurrir escribir algo así:

begin
  objeto.otro_objeto.length
rescue
  0
end

Pero en este último caso merecerías morir entre terribles sufrimientos.

Volviendo a la realidad, como quieres ser un buen rubista, descubres los if más molones:

objeto.otro_objeto.length if objeto.otro_objeto

Pero todavía se puede optimizar un poco más y dejar más claras las intenciones al usar try:   Leer más Construcción try en Rails, para preguntar si algo existe




Síguenos en Twitter @EmergiaRails

 

actualidad

empleo

¿Quieres trabajar con nosotros?
Déjanos tus datos si quieres formar parte de nuestra empresa


Ver ofertas


síguenos

Facebook de Emergia Twitter de Emergia


suscríbete

Si deseas recibir información sobre novedades de emergia