尋問のためのGemの仕様を入手するために、私は次のことを知っています。
spec = Gem::Specification.find_by_name('my_gem')
上記を再利用可能な方法で書き直すことができるように、プログラムで「この」宝石の名前を識別する方法はありますか?
言い換えると、実行時に実行中のRubyコードから親gemの名前を取得するにはどうすればよいでしょうか。
尋問のためのGemの仕様を入手するために、私は次のことを知っています。
spec = Gem::Specification.find_by_name('my_gem')
上記を再利用可能な方法で書き直すことができるように、プログラムで「この」宝石の名前を識別する方法はありますか?
言い換えると、実行時に実行中のRubyコードから親gemの名前を取得するにはどうすればよいでしょうか。
現在のソースファイルのgem仕様を見つけるには(libディレクトリのソースファイルであると想定):
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__
実際に関心のあるソースファイルからを渡すか、呼び出し元のスタックを調べることで、これを再利用可能にすることができます(ただし、これはおそらく悪い考えです)。