2009-12-02 10 views
7

Estoy construyendo una joya que necesita una gema json instalada para que funcione. No importa qué json joya: json_pure, json-jruby, o el json basado en C.Dependencia condicional en Ruby Gemspec

¿Hay alguna manera de definir esto en gemspec? This response sugiere mantener una gema completamente separada para cada versión, pero parece que tiene que haber una mejor manera.

¿Alguien tiene alguna experiencia con esto?

¿Debo utilizar la opción spec.requirements para avisar al usuario de que necesita una gema json?

Respuesta

2

Sí, sugeriría un requisito de texto simple en spec.requirements. También recomendaría algún tipo de encadenamiento de carga cuando la gema se carga por primera vez:

# in init.rb and/or rails/init.rb: 
unless Object.const_defined?(:JSON) 
    begin 
    require 'json_pure' 
    rescue LoadError 
    begin 
     require 'json-ruby' 
    rescue LoadError 
     require 'json' 
    end 
    end 
end 
unless Object.const_defined?(:JSON) 
    raise "Could not load gem MyGem; did you install one of json_pur, json-ruby, or the C-based json library?" 
end 
+0

Parece una buena idea. Lo bueno de todas las gemas JSON es que solo necesitas 'json' para simplificar el encadenamiento de carga. –