Я должен был раскошелиться на камень Thor , потому что у моего cli есть одна команда 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
thor
, поэтому до сегодняшнего дня у меня не было этой проблемы.
Есть ли другой выход для достиженияэто без каких-либо грязных хаков?