Posts en la categoría: Ruby on Rails

config.gem.github sin depender de ActiveSupport

En mi post de ayer propuse una solución parar requerir gemas de GitHub con estilo, sin embargo me olvidé de una cuestión importante que me ha recordado Asís: el código depende de ActiveSupport, por lo tanto, ciertos scripts (por ejemplo console) no funcionan bien. La solución rápida es requerir ActiveSupport. La solución buena es eliminar la dependencia. Nuevo pastie al canto.

Mea culpa. Disculpen ustedes.

Requerir gemas de GitHub con estilo: config.gem.github

Llevaba tiempo pensando en simplificar la definición de dependencias de gemas de GitHub en el environment.rb de nuestras aplicaciones, pero no encontraba el momento. El domingo estuve leyendo un post de Bruce Williams en su blog CodeFluency: A GitHubby config.gem hack, donde propone una solución para pasar de esto:

config.gem 'yfactorial-utility_scopes', :version => '0.2.2', 
  :lib => 'utility_scopes', :source => 'http://gems.github.com'

...a esto:

config.gem 'yfactorial-utility_scopes', :version => '0.2.2', :github => true

Había dos cosas en su solución que no me gustaban: 1) el uso de un flag y 2) que la implementación sobreescribe el método gem. Así que me he animado y acabo de montar una versión que intenta paliar esos dos problemas. El código no tiene nada de especial. Podéis cogerlo de este pastie. Sólo hay que tirarlo en lib y requerirlo en environment.rb. Y con esto ya podemos escribir bloques de dependencias con estilo:

config.gem 'authlogic', :version => '1.3.8'
config.gem 'faker', :version => '0.3.1'  
config.gem 'spreadsheet', :version => '0.6.2.1'  

config.gem.github 'yfactorial-utility_scopes', :version => '0.2.2'
config.gem.github 'mislav-will_paginate', :version => '2.3.6' 
config.gem.github 'rubyist-aasm', :version => '2.0.5'

Actualización

Esta versión del código depende de ActiveSupport. En este post podéis encontrar una versión actualizada del código que no depende de AS.

Autoflagelación

A petición de Asís he añadido a nuestro úlitmo proyecto el siguiente código en la configuración de Capistrano.

namespace :deploy do   
  before "deploy", "notes:show"
end

namespace :notes do  
  task :show do
    unless (notes = `$(which rake) notes`).to_a.length < 2
      Capistrano::CLI.ui.say notes
      answer = Capistrano::CLI.ui.ask "Do yo want to continue? [Y/n]"
      exit unless ['y','Y', ''].include?(answer)
    end
  end
end

Ahora es imposible hacer un despliegue sin ver todos los TODOs que nos hemos dejado sin hacer.

Autoflagelación

Actualización

La tarea de capistrano tenía una pifia pero ya hemos actualizado el código.