gem с несколькими требуется в gemfile - PullRequest
4 голосов
/ 02 февраля 2012

Итак, у меня есть этот драгоценный камень, и он зависит от множества других драгоценных камней.Хотя в gemspec указано, что

s.add_dependency "haml" ...

, упаковщик, похоже, не заботится, поэтому я должен повторить эту зависимость в Gemfile.Есть ли синтаксис, требующий нескольких драгоценных камней?Нечто подобное (не работает):

gem "so-and-so",
   :git => "some-repo",
   :require => ["this-gem", "that-gem", "and-what-not"]

Требуется, кажется, разрешить только один объект

Ответы [ 3 ]

5 голосов
/ 25 июля 2013

Согласно документации Gemfile вы можете просто передать массив требований. Я задал этот вопрос, исследуя RSpec как синтаксический сахар для Minitest и отмечая, что мне нужно:

require 'minitest/spec'
require 'minitest/autorun'

Чтобы заставить это работать. Я никогда раньше не пробовал многократные требования в Gemfile, и поиск в Google привел меня к этому вопросу, и еще больше Google привел меня к Gemfile документам, в которых говорится:

REQUIRE AS (:require)
Each gem MAY specify files that should be used when autorequiring via
Bundler.require. You may pass an array with multiple files, or false
to prevent any file from being autorequired.

gem "sqlite3-ruby", :require => "sqlite3"
gem "redis", :require => ["redis/connection/hiredis", "redis"]
gem "webmock", :require => false

Так что в моем собственном Gemfile я включил

group :test do
  gem 'minitest', require: ['minitest/autorun', 'minitest/spec']
  gem 'rack-test', require: 'rack/test'
  gem 'simplecov', require: false
end

, который отлично работает и позволяет мне написать тест вроде

describe 'basic crud' do
  it 'must create a user with valid details' do
    User.transaction do
      user = User.create!(username: 'test', password: 'pass')
      user.username.must_equal 'test'
      user.destroy
    end
  end
end

То, что я нахожу, читается лучше, чем assert_equals user.username, 'test' и дает мне доступ к моим знакомым before :each do… и after :all do… методам подготовки и очистки.

0 голосов
/ 02 февраля 2012

Вы должны указать bundler использовать ваш gemspec в качестве источника для зависимостей. Чтобы сделать это, просто вставьте это в ваш Gemfile

source "http://rubygems.org"

# require this gem's dependencies
gemspec

Обычно для драгоценного камня это единственное содержимое Gemfile.

0 голосов
/ 02 февраля 2012

Я почти уверен, что Bundler обращается к самим драгоценным камням, чтобы управлять своими собственными зависимостями.Идея в том, что вам не нужен такой синтаксис для указания зависимостей, потому что гем делает это за вас в файле gemspec. Как указано в документации к пакету , ключевое слово require используется для: 'Если основной файл драгоценного камня отличается от имени драгоценного камня, укажите, как его запрашивать.'

ЕслиУ gem есть s.add_dependency 'haml' ..., и он не работает, либо у файла gem gempsec есть ошибка, либо у версии bundler есть ошибка (или она слишком старая, чтобы знать о зависимостях или что-то в этом роде).Я бы сообщил об этом авторам драгоценного камня.

Один обходной путь, который вы могли бы использовать, пока не выясните, что не так с драгоценным камнем или его зависимостями, будет поместить драгоценный камень и другие необходимые ему драгоценные камни.использует в группе и добавляет комментарий к Gemfile, в котором упоминается, почему вы это делаете.

С каким камнем у вас проблемы?Если вы укажете имя, другие смогут проверить, что вы испытываете, или оказать вам лучшую помощь.И что происходит, когда вы пытаетесь gem dependency gem_name в оболочке?

...