Предположим, у вас есть такая структура проекта:
bin/
|__ foobar*
lib/
|__ foobar/
| |__ templates/
| | |__ a/
| | |__ b/
|___|__ meta.rb
|___|__ utils.rb
В каталоге lib/foobar/teplates
у вас есть каталоги шаблонов или
файлы.
lib/foobar/meta.rb
файл содержит название вашего проекта и его
версия. Важно сохранить их (особенно номер версии)
синхронизируется с именем и версией проекта в вашей жемчужине
Спецификация. (Лучший способ сделать это - прочитать meta.rb
из Rakefile
передать значения в спецификацию.)
Например, meta.rb
может выглядеть так:
module Foobar
module Meta
NAME = 'foobar'
VERSION = '0.1.2'
end
end
Затем напишите функцию, которая возвращает полный путь к каталогу lib
.
независимо от того, тестируете ли вы свой проект из источников
каталог или проект устанавливается из рубинов.
utils.rb
require_relative 'meta'
module Foobar
module Utils
# Return a directory with the project libraries.
def self.gem_libdir
t = ["#{File.dirname(File.expand_path($0))}/../lib/#{Meta::NAME}",
"#{Gem.dir}/gems/#{Meta::NAME}-#{Meta::VERSION}/lib/#{Meta::NAME}"]
t.each {|i| return i if File.readable?(i) }
raise "both paths are invalid: #{t}"
end
# [...]
end
end
Имея функцию Foobar::Utils.gem_libdir
, вы всегда можете прочитать ваши
шаблоны в bin/foobar
файле:
require_relative '../lib/foobar/utils'
puts Dir[Foobar::Utils.gem_libdir + '/*']
puts Foobar::Utils.gem_libdir + '/templates/a/blah-blah'