rubygems / добавить зависимость во время выполнения только для теста (или любой заданной среды)

#ruby-on-rails #rspec #rubygems

#ruby-on-rails #rspec #rubygems

Вопрос:

В настоящее время работает над gem, который расширяет функциональные возможности спецификации (это требуется factory_bot ), как определить его в add_runtime_dependency только для соответствующей группы (здесь , :test )?

Или лучше ли разрешать gem поднимать, если пользователь не добавляет соответствующую зависимость в свой проект?

Ответ №1:

Если у вашего gem есть зависимость во время выполнения, она должна быть указана в gemspec, поскольку это позволяет Bundler выполнять разрешение зависимостей, чтобы узнать, совместим ли ваш gem с другими gems в Gemfile.

Конечный пользователь должен поместить ваш драгоценный камень в группу в Gemfile. Если они поместят его в :test группу, он будет загружен только в тестовую среду. Если они не прочитали readme и поместили его в основную группу, то это не ваша проблема.

 Gem::Specification.new do |s|
  # ...
  s.add_dependency 'factory_bot', version
  # ...
end 
  

Обратите внимание, что вы также можете перечислить зависимости разработки в своей спецификации gemspec.

 Gem::Specification.new do |s|
  # ...
  s.add_development_dependency 'rubocop', '~> 0.44.1'
end
  

Эти зависимости будут использоваться при разработке / тестировании самого gem, но не «передаются» при установке gem через bundler.

Лучше ли разрешать gem поднимать, если пользователь не добавляет соответствующую зависимость в свой проект?

Нет.В Ruby уже есть хороший распознаватель зависимостей (Bundler). Используйте это.