Условная зависимость в Ruby Gemspec - PullRequest
7 голосов
/ 03 декабря 2009

Я создаю драгоценный камень, для которого нужно установить драгоценный камень json. Не имеет значения, какой json gem: json_pure, json-jruby или json на основе C.

Есть ли хороший способ определить это в gemspec? В этом ответе предлагается поддерживать совершенно отдельный гем для каждой версии, но, похоже, должен быть лучший способ.

У кого-нибудь есть опыт?

Должен ли я просто использовать опцию spec.requirements , чтобы уведомить пользователя о том, что ему / ей нужен камень json?

1 Ответ

2 голосов
/ 03 декабря 2009

Да, я бы предложил простое текстовое требование в spec.requirements. Я бы также порекомендовал какую-то цепочку нагрузок при первой загрузке драгоценного камня:

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...