Ruby Gemspec中的条件依赖

Jim*_*y Z 7 ruby rubygems

我正在构建一个需要安装json gem的gem,以便它能够工作.哪个json gem:json_pure,json-jruby或基于C的json无关紧要.

有没有一种在gemspec中定义它的好方法?这个响应建议为每个版本维护一个完全独立的gem,但似乎必须有更好的方法.

有没有人有这方面的经验?

我应该只使用spec.requirements选项向用户发出他/她需要json gem的通知吗?

Jam*_*sen 2

是的,我建议在spec.requirements. 我还建议在 gem 首次加载时进行某种加载链:

# 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
Run Code Online (Sandbox Code Playgroud)