Что связывает, что лучший способ сказать, является ли драгоценный камень "желательным"?
Скажите в моем Gemfile, что у меня
group :test do
gem 'rspec-core', require: false
end
Есть ли простой способ увидеть, была ли группа test
в комплекте? (например, в этом случае bundle
можно было бы вызвать с или без --without test
).
Я не мог найти его, поэтому я начал искать, требуется ли rspec-core
и нашел несколько очевидных решений:
Bundler.definition.index.search("rspec-core")
# or
Gem.loaded_specs["rspec-core"]
Какой самый стабильный API для определения того, нужен ли камень?
(не пытаясь потребовать его и спасти LoadError
)
Ответы
Ответ 1
Я собираюсь пойти дальше и сказать, что Gem.loaded_specs
более надежный, чем переход через bundler; Я обнаружил одно обстоятельство с расслоением 1.12.5, где у меня есть драгоценный камень из GitHub в одной из групп, которые я перехожу на without
, это приводит к тому, что Bundler.definition.index.search
поднимает a Bundler::PathError
, цитируя драгоценный камень от GitHub, который я намеренно не отправка одной посылкой.
Ответ 2
Когда создается приложение Rails, оно обычно включает строку, которая использует Rails.env, чтобы определить, какую группу требуется. Он должен выглядеть примерно так: Bundler.require(:default, Rails.env)
. Обычно это происходит при инициализации приложения Rails. Вот фрагмент кода, который делает это:
class Rails::Boot
def run
load_initializer
Rails::Initializer.class_eval do
def load_gems
@bundler_loaded ||= Bundler.require :default, Rails.env
end
end
Rails::Initializer.run(:set_load_path)
end
end
Итак, если вы тестируете Rails.env, он потребует всех драгоценных камней в тестовой группе.