Ruby Links (II)

Diciembre ha sido un mes movidito en cuanto a lanzamientos…

Y dentro de los artículos de recomendable lectura me quedaría con estos dos:

  • Speeding up Rails 4.2: La importancia de los tests “reales” frente a tests de velocidad teóricos y cómo gracias a ellos se han podido hacer mejoras de rendimiento en la nueva versión de Rails.
  • Hashie Considered Harmful – An Ode to Hash and OpenStruct: No tanto por lo que se cuenta de Hashie, sino para defender que no está bien añadir gemas sin haberlas estudiado y conocer bien sus dependencias.

Ruby Links (I)

Una colección de enlaces interesantes con los que me he cruzado en los últimos días:

Novedades en Rails 4.2: config_for

Hasta ahora un patrón bastante común en aplicaciones Rails que necesitan de un fichero de configuración era encontrarse en el config/application.rb algo parecido a esto:

require "ostruct"
config_file = File.join("config/myapp.yml")
config = YAML.load(File.read(config_file))[Rails.env]
AppConfig = OpenStruct.new(config)

De esa manera podíamos usar el objeto AppConfig en toda la aplicación y así llevar a nuestros controladores o modelos algunas variables de configuración que debían cambiar dependiendo del entorno (host y puerto para Redis, número de segundos de delay que indicar a un worker Sidekiq en el perform_in, app id y secret de una API externa, etc).

Suele pasar en la comunidad Rails que conforme un patrón de este tipo empieza a ser muy usado acabe siendo adaptado e incorporado al propio framework. En este caso, en la versión 4.2 nos llega en la forma de config_for.

Supongamos que tenemos un fichero llamado config/redis.yml con el siguiente contenido:

development:
  host: localhost
  port: 6379
test:
  host: localhost
  port: 6379
production:
  host: my-production-redis-server
  port: 6379

Ahora podemos hacer la siguiente llamada en la aplicación:

> Rails.application.config_for(:redis)
=> {"host"=>"localhost", "port"=>6379}

El valor del hash en este ejemplo dependería del entorno en el que nos encontrásemos.

Podéis encontrar más información acerca de config_for en el propio pull request en el que se incorporó a Rails.