Допустим, у меня есть гем с именем foo с такой файловой структурой:
foo.gemspec
test_foo.rb
lib/foo.rb
lib/foo/file1.rb
lib/foo/file2.rb
Файл test_foo.rb
содержит некоторый код, который я использую, чтобы опробовать свой гем. Он получает доступ к коду гема с помощью следующей строки:
require './lib/foo'
Затем lib/foo.rb
обращается к другим файлам, необходимым для гема, следующим образом:
require './lib/foo/file1'
require './lib/foo/file2'
Поскольку test_foo.rb
находится в корне каталога gem, необходимо потребовать файлы в lib/foo
с полным путем от корневого каталога.
Все это прекрасно работает и позволяет мне сразу поиграть с моим драгоценным камнем, изменив код, используемый в test_foo.rb
.
Однако, если я затем захочу собрать драгоценный камень, мне придется изменить свои вызовы на require
, например:
require 'foo/file1'
require 'foo/file2'
вместо
require './lib/foo/file1'
require './lib/foo/file2'
Что довольно утомительно делать каждый раз Я хочу построить драгоценный камень.
Итак, я подумал о другом способе попробовать это: использовать rake
для автоматизации сборки и установки драгоценного камня, что-то вроде этого:
task :build do
`gem build foo.gemspec`
`gem uninstall foo`
`gem install ./foo-0.0.0.gem`
end
, а затем, когда я внес изменения в мой код и хотел попробовать его, просто запустите rake build
и вызовите require 'foo'
в test_foo.rb
.
Но это довольно медленный процесс, и кажется, что он лишает ruby смысла как языка, на котором вам не нужно создавать свой код, прежде чем попробовать его.
Итак, мой вопрос: какой рабочий процесс лучше всего использовать при активной разработке драгоценного камня и его тестировании?