Что связывает, что лучший способ сказать, является ли драгоценный камень "желательным"?

Скажите в моем 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, он потребует всех драгоценных камней в тестовой группе.