Gem.bin_path('cucumber', 'cucumber')
バイナリ/実行可能ファイルのパスを返します。ライブラリパスを返すような関数はないようです。この場合、理想的には以下を返します:
/home/hedge/.rvm/gems/Ruby-1.9.2-p136@bbb-bdd-meta-bdd/gems/cucumber-0.10.0/lib
私は何かを見逃したことがありますか、この情報を取得する簡単な方法がありますか?
更新:CLIまたはstdlib以外の提案はありません。
チェックされた答えの問題は、rubygemを「要求」しなければならないことです。そうしないと動作しません。多くの場合、これは望ましくありません。実行可能なgemを使用している場合、「必要」にしたくない場合、または大量の警告が表示されるためです。
これは、実行可能ファイルとライブラリのユニバーサルソリューションです。
spec = Gem::Specification.find_by_name("cucumber")
gem_root = spec.gem_dir
gem_lib = gem_root + "/lib"
本当に技術的になりたいのであれば、libディレクトリは1つではありません。 gemspecには、検索するすべてのディレクトリの「require_paths」配列があります($ LOAD_PATHに追加されます)。したがって、require_pathsの配列が必要な場合は、これを使用します。
gem_lib = gem_root + "/" + spec.require_paths[0]
バンドラーは必要ありません。
Gemがrequireでロードされた後、次のようにGem.loaded_specsを使用してlibパスを見つけます。
require 'rubygems'
require 'cucumber'
gem_root = Gem.loaded_specs['cucumber'].full_gem_path
gem_lib = File.join(gem_root, 'lib')
なぜこれを行うのかわかりませんが、コマンドラインを使用している場合は、gem env
。
bundle show cucumber
を使用してみてください。
バンドラーのソースを見ると、次のようになります:
spec = Bundler.load.specs.find{|s| s.name == name }
spec.full_gem_path
are bundlerを使用していますか?