2009-12-02 23 views
7

Buduję klejnot, który wymaga klejnotu json, aby działał. Nie ma znaczenia, który klejnot json: json_pure, json-jruby lub json w wersji C.Zależność warunkowa w Ruby Gemspec

Czy istnieje dobry sposób zdefiniowania tego w gemspec? This response sugeruje zachowanie całkowicie odrębnego klejnotu dla każdej wersji, ale wygląda na to, że musi być lepszy sposób.

Czy ktoś ma z tym doświadczenie?

Czy powinienem użyć opcji spec.requirements, aby poinformować użytkownika, że ​​potrzebuje on klejnotu json?

Odpowiedz

2

Tak, sugeruję prosty wymóg tekstowy w spec.requirements. Poleciłbym również pewnego rodzaju łańcuchy ładunkowe, gdy klej pierwszy ładuje:

# 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

Brzmi jak dobry pomysł. Fajną cechą wszystkich klejnotów JSON jest to, że potrzebujesz tylko "json", aby uprościć łańcuchy ładujące. –