Gemspec: Как я могу указать зависимости, которые не обязательно должны быть автоматическими?

Я написал драгоценный камень с определенным набором зависимостей, и некоторые из них я бы не хотел, чтобы они неявно требовались при объединении в другой проект. Примером может служить жемчужина uuidtools, которую я хочу использовать только в файлах.

gem.add_dependency("uuidtools",["=2.1.3"], :require => false)

Этот синтаксис является ложным, так как: require = > false там неожиданно, но это более или менее суммирует то, что я хотел бы сделать с ним. Может ли кто-нибудь помочь мне в этом?

Ответы

Ответ 1

По умолчанию в ядре, указанном в файле gemspec для двигателей, требуется явно указать. Из официальной документации - Note that if you want to immediately require dependencies when the engine is required, you should require them before the engine initialization. В вашем случае вы должны иметь возможность получить что-то вроде gem.add_dependency 'uuidtools', '2.1.3' в вашем файле gemspec и потребовать в соответствующих местах.

Ответ 2

Я думаю, что способ выполнить то, о чем вы просите, это не поместить его в свой собственный gemspec, а вместо этого добавить Gemfile для bundler. Затем вы можете добавить его как драгоценный камень, установленный поставщиком.

Для этого добавьте простое слово "gemspec" в верхней части Gemfile или после деклараций источника. Это заберет драгоценные камни gemspec. Это, в принципе, не очень хороший дизайн. Это больше похоже на энтропию, которую вам следует избегать в драгоценных камнях и исходном коде, когда это возможно. Сказав, что я не думаю, что есть какой-либо вред, устанавливающий драгоценный камень и требующий его. Это должно быть правильно указано на именах и не будет мешать чему-либо еще.

Учитывая драгоценный камень, который вы цитируете. Возможно, вам больше не понадобится этот драгоценный камень. Вы на Ruby 1.9? Если это так, теперь есть модуль SecureRandom, встроенный в Ruby.

require 'secure_random'

my_uuid = SecureRandom.uuid

Вы можете сгенерировать с ним тоже UUID! Таким образом, ваши администраторы баз данных будут счастливы и могут использовать тип данных UUID в Postgres. (Вы используете postgres, правильно! Ха-ха). Также IIRC, UUIDTools не генерирует надлежащий UUID в соответствии со стандартами. Я считаю, что третья последовательность неверна.