假設你有一個項目的結構是這樣的:
bin/
|__ foobar*
lib/
|__ foobar/
| |__ templates/
| | |__ a/
| | |__ b/
|___|__ meta.rb
|___|__ utils.rb
在lib/foobar/teplates
目錄中你有你的模板目錄或文件 。
lib/foobar/meta.rb
文件包含您的項目名稱及其 版本。保持它們(特別是版本號) 與名稱&與您的寶石 規範中的項目版本同步非常重要。 (要做到這一點,最好的辦法是從Rake文件 讀meta.rb
將值傳遞到規格)
例如,meta.rb
可能看起來像:
module Foobar
module Meta
NAME = 'foobar'
VERSION = '0.1.2'
end
end
然後編寫返回一個完整路徑的功能lib
目錄 無論您是從源 目錄測試項目還是從rubygems安裝項目。
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'