私の宝石のルートパスを知る方法はありますか? gemsパス内のyamlからデフォルトの設定を読み込もうとしています。 Rubyでgemsルートディレクトリを取得するにはどうすればよいですか?
次のプロジェクト構造が与えられます。
your_gem/
lib/
your_gem.rb
これが私がそれをする方法です:
# your_gem.rb
module YourGem
def self.root
File.expand_path '../..', __FILE__
end
end
Ruby 2.0では Kernel#__dir__
メソッド;それはかなり短い解決策を可能にします:
# your_gem.rb
module YourGem
def self.root
File.dirname __dir__
end
end
他のディレクトリにアクセスする必要がある場合は、root
に基づいて簡単に構築できます。
module YourGem
def self.bin
File.join root, 'bin'
end
def self.lib
File.join root, 'lib'
end
end
これは、実行可能ファイルとライブラリのユニバーサルソリューションです。 Gem APIを使用して仕様をロードするため、パスは常に正しいです。
spec = Gem::Specification.find_by_name("your_gem_name")
gem_root = spec.gem_dir
yaml_obj = YAML.load(gem_root + "/file_name.yaml")
gem list <gem> -d
または、バンドラーを使用している場合:
bundle show <gem>