web-dev-qa-db-ja.com

宝石の根を見つける

私の宝石のルートパスを知る方法はありますか? gemsパス内のyamlからデフォルトの設定を読み込もうとしています。 Rubyでgemsルートディレクトリを取得するにはどうすればよいですか?

24
Jason Waldrip

次のプロジェクト構造が与えられます。

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
29
Matheus Moreira

これは、実行可能ファイルとライブラリのユニバーサルソリューションです。 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")
28
user1182000

gem list <gem> -d

または、バンドラーを使用している場合:

bundle show <gem>

6
DanS