Как потребовать разветвленный файл gem lib?Имя конфликтует? - PullRequest
0 голосов
/ 18 июля 2011

Я должен был раскошелиться на камень 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, поэтому до сегодняшнего дня у меня не было этой проблемы.

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

1 Ответ

2 голосов
/ 18 июля 2011

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

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

или даже локальный путь

gem 'thor', :path => '/path/to/thor.git', :require => 'thor'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...