2009-12-02 30 views
7

Çalışması için bir json gemine ihtiyaç duyulan bir mücevher yapıyorum. Hangi json geminin önemi yoktur: json_pure, json-jruby veya C-tabanlı json.Ruby Gemspec'deki Koşullu Bağımlılık

Bunu bir gemspec'te tanımlamanın iyi bir yolu var mı? This response, her sürüm için tamamen ayrı bir taş bulundurmayı önerir, ancak daha iyi bir yol olması gerektiği anlaşılıyor.

Bu konuda herhangi bir deneyimi olan var mı?

Kullanıcıya bir json gemine ihtiyacı olduğunu bildirmek için spec.requirements seçeneğini kullanmalı mıyım?

cevap

2

Evet, spec.requirements'da basit bir metin gereksinimi öneriyorum. Aynı zamanda taş ilk yüklendiğinde bir çeşit yük zincirleme de önerebilirim:

# 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

İyi bir fikir gibi geliyor. Tüm JSON mücevherleri ile havalı şey, sadece 'json' gerektirdiğinden, yük zincirlemeyi basitleştirecektir. –