Novedades en Edge Rails #21

Nota: Esta entrada es una traducción de la publicada por Mike Gunderloy el 24 de Abril de 2009 en el blog de Ruby on Rails.

Durante la última semana se han estado realizando operaciones quirúrgicas en Edge Rails, en preparación para un lanzamiento alfa de Rails 3.0 en la RailsConf. Hemos visto unas 5 entreags en la rama maestra de Github durante esta semana. He aquí una visión general de los cambios más recientes.

Cambios en Rails 2.3.x

Antes de empezar con los cambios en la rama maestra, ha habido un par de entregas en la rama 2-3-stable, que ya han sido trasladadas a la rama maestra.

  • Se han corregido un par de errores que tenían que ver con las condiciones en hashes, especialmente para garantizar que :dependent => :delete funcionará en todos los casos.
  • El adaptador de Active Record para PostgreSQL ahora hace lo correcto si utilizamos tablas en esquemas distintos a los de por defecto. Por supuesto hay que poner el nombre de tabla en la clase del modelo, por supuesto: set_table_name 'other_schema.customers' commit
  • También en el adaptador de PostgreSQL se han corregido un par de bugs relativos al entrecomillado incorrecto de nombres con letras mayúsculas.

Refactorización de ActionView::Path

Una gran parte de los cambios de esta semana en Rails 3 vienen dados por la continuación del trabajo de refactorización de ActionPack. Esta vez el objetivo era ActionView::Path. En estrega se incluye el desacoplamiento de ActionView::Path, ActionController y ActionMailer, lo que conlleva dos beneficios. En primer lugar el código es más fácil de mantener y comprender porque se encuentra consolidado en un único lugar. Y en segundo, al abstraer este tipo de cosas y dar una API clara se permite que otros componentes participen en la capa del controlador, además de los mailers y los controladores tradicionales.

Queda bastante por hacer en el futuro: el plan es desacoplar también las plantillas del sistema de archivos, así como desacoplar las traducciones de ActionView. ¡Permanezcan atentos!

Soporte JSON de quita y pon

Tal vez recuerden que Rails recibió hace poco el soporte XML de quita y pon. Esta semana, gracias al trabajo de Rick Olson, le toca el turno a JSON, lo que significa que podemos reemplazar el soporte de JSON por defecto basado en YAML por la gema JSON:


ActiveSupport::JSON.backend = "JSONGem" 

Como parte de este cambio Rails ahora utiliza ActiveSupport::JSON.encode() cuando necesita generar JSON, lo que reemplaza al antiguo #to_json. El equipo de Rails recomienda que todos hagamos lo miismo. Si escogemos seguir utilizando #to_json debemos saber que tal vez algunas librerías lo reemplacen. Podemos utilizar este patrón para saber si estamos usando la propia definición de Rails de #to_json:


gem 'json'
# Se carga la gema JSON, que sobreescribe to_json
ActiveSupport::JSON.backend = "JSONGem" 

class ActiveRecord::Base
  # reeemplaza el método to_json de la gema con el de Rails
  alias to_json rails_to_json
end

Active Support a la carta

En Rails 2.x, require "active_support" recupera todas las extensiones del core a la vez. En Rails 3, esto sólo hace que las extensiones estén disponibles; y por tanto hay que requerir todas las que queramos usar. Muchos de los cambios de esta semana trataban de desmenuzar Active Support de forma que podamos tomar sólo lo que queramos usar y nada más.

El resultado final es que es fácil escoger prestaciones de Active Support sin tener la sensación de cargar con un señor grandullón a nuestras espaldas. Y de regalo, toda la documentación se encuentra ahora consolidada en un único sitio: la clase principal. No hay que ir mirando en cada módulo para averiguar qué hace un método.

Todas las extensiones se han reorganizado de forma que se pueden requerir directamente sin asumir que todo ActiveSupport está dipsonible. ¿Queremos inflexiones como "car".plugarilze? Basta con hacer require "active_support/core_exte/string/inflections" y las tendremos. Nota: la implementación y organización probablemente sufrirá cambios en el futuro.

Otros cambios en Edge

  • Se han eliminado las extensiones de Rails a la clase Pathname, dado que sólo se usaban en un único lugar del código. commit
  • Se ha eliminado el soporte para DRb como almacenamiento de cache. commit
  • El adaptador de SQLite se une al de PostgreSQL en el soporte de resoluciones de microsegundos. commit
blog comments powered by Disqus