Как потребовать разветвленный файл gem lib? Имя конфликтует?

Я должен был раскошелиться на драгоценный камень Тор, потому что мой кли имеет одну команду run который зарезервирован в самой библиотеке Thor, изменил свое имя на миллисамиор только в .gemspec следующее:

Gem::Specification.new do |s|
...
  s.name = 'millisami-thor'
...
end

и чтобы использовать его, я вставил драгоценный камень под именем millisami-thor на rubygems.org и в Gemfile моего проекта Cli, я положил gem 'millisami-thor', :require => 'thor'

Сейчас во время тестирования bundle exec cucumber features или попробовать исполняемый файл, просто сделал ./bin/executable --params и это сработало.

Теперь я строю драгоценный камень с gem build gemname.gemspec что генерирует gemname.gem и установлен с gem install gemname.gem и он устанавливается так же, как и бинарный файл. Хорошо, пока здесь.

Теперь, когда я использую бинарный cmd, как executable --paramsвыглядит оригинал thor библиотека вместо раздвоенной.

Я понял, что это было связано с require ... в исполняемом файле.

require 'thor'
require 'fileutils'

require 'gemname/cli'

Cf::CLI.start

потому что там я явно требуется оригинал thor, Теперь, когда я изменяю это на require 'millisami-thorне может найти и говорит:

...
custom_require.rb:36:in `require': no such file to load -- millisami-thor (LoadError)
...

В Gemfile я мог бы сделать gem 'millisami-thor, :require => 'thor' так что он загружает раздвоенный драгоценный камень. Но как я могу сделать то же самое, если это просто require 'millisami-thor'?

Единственный вариант, который я могу придумать, - это изменить все имена классов на "MillisamiThor" вместо "Thor" и имена файлов тоже. Но это будет слишком грязно и безобразно.

Я мог бы заметить это, если бы установил свой драгоценный камень и протестировал его раньше. Но я сделал только в тестовой среде, в которой пакет требует millisami-thor"s thor файл, поэтому у меня не было этой проблемы до сегодняшнего дня.

Есть ли какой-то другой выход, чтобы добиться этого без каких-либо грязных хаков?

1 ответ

Вы можете сохранить исходную настройку gem и указать Bundler на свой git-репозиторий:

gem 'thor', :git => 'git://github.com/yourname/thor.git', :require => 'thor'

или даже местный путь

gem 'thor', :path => '/path/to/thor.git', :require => 'thor'
Другие вопросы по тегам