5

尋問のためのGemの仕様を入手するために、私は次のことを知っています。

spec = Gem::Specification.find_by_name('my_gem')

上記を再利用可能な方法で書き直すことができるように、プログラムで「この」宝石の名前を識別する方法はありますか?

言い換えると、実行時に実行中のRubyコードから親gemの名前を取得するにはどうすればよいでしょうか。

4

1 に答える 1

7

現在のソースファイルのgem仕様を見つけるには(li​​bディレクトリのソースファイルであると想定):

require 'rubygems'

searcher = if Gem::Specification.respond_to? :find
  # ruby 2.0
  Gem::Specification
elsif Gem.respond_to? :searcher
  # ruby 1.8/1.9
  Gem.searcher.init_gemspecs
end
spec = unless searcher.nil?
  searcher.find do |spec|
    File.fnmatch(File.join(spec.full_gem_path,'*'), __FILE__)
  end
end

__FILE__実際に関心のあるソースファイルからを渡すか、呼び出し元のスタックを調べることで、これを再利用可能にすることができます(ただし、これはおそらく悪い考えです)。

于 2013-03-02T08:09:46.330 に答える