Trabe ya no escribe aquí. Puedes encontrarnos en nuestra publicación en Medium: medium.com/trabe.

4Trabes Historias de una empresa en 100 metros cuadrados

El blog de Trabe Soluciones

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

| | Comentarios

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:

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

…a esto:

1
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:

1
2
3
4
5
6
7
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

| | Comentarios

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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.

Actualización

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