2009-12-02 9 views
7

Ich baue ein Juwel, das ein JSON-Juwel benötigt, damit es funktioniert. Es spielt keine Rolle, welches json-Juwel: json_pure, json-jruby oder das C-basierte json.Bedingte Abhängigkeit in Ruby Gemspec

Gibt es eine gute Möglichkeit, dies in einer Gemspec zu definieren? This response schlägt vor, für jede Version einen komplett separaten Edelstein zu pflegen, aber es scheint, als müsste es einen besseren Weg geben.

Hat jemand Erfahrung damit?

Sollte ich einfach die spec.requirements Option verwenden, um dem Benutzer eine Nachricht zu geben, dass er/sie ein JSON-Juwel braucht?

Antwort

2

Ja, ich würde eine einfache Textanforderung in spec.requirements vorschlagen. Ich würde auch eine Art von load-chaining empfehlen, wenn der Edelstein zuerst lädt:

# 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

Klingt wie eine gute Idee. Die coole Sache mit all den JSON-Edelsteinen ist, dass Sie nur 'json' benötigen, damit es das Load-Chaining vereinfacht. –

Verwandte Themen