Как потребовать разветвленный файл 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'