特定のファイルを含むGemを探索する。
Gem::GemPathSearcherを使うと、ローカルにインストールされたGemの中から、特定のファイルを含むGemを探索することができます。
- findで最初に見つかった1つを、
- find_allでマッチするもの全てを取得できます。
- find_allの方は旧バージョンのものもヒットするので注意。findでは最新のGemが返されます。
- 内部的には、各gemのlibディレクトリをglobして探索しているだけなので、ワイルドカードも使えたりします。
require 'rubygems' searcher = Gem::GemPathSearcher.new # "httpclient"を含む gem spec を探索。 spec = searcher.find("httpclient") puts "#{spec.name} : #{spec.version}" puts "---" # "javaclass/class.rb"を含む gem spec を全て探索。 specs = searcher.find_all("javaclass/class.rb") specs.each {|spec| puts "#{spec.name} : #{spec.version}" } puts "---" # 内部的には 各gemのlibディレクトリをglobして探索しているだけなので、 # ワイルドカードも使えたりする。 # ↓は hで始まるファイルを含むgem specを探索する例。 specs = searcher.find_all("h*") specs.each {|spec| puts "#{spec.name} : #{spec.version}" }
実行結果です。
httpclient : 2.1.4 --- unageanu-javaclass : 0.2.0 unageanu-javaclass : 0.1.1 --- highline : 1.5.0 hoe : 1.11.0 hoe : 1.10.0 hoe : 1.9.0 hoe : 1.5.1 hpricot : 0.6 httpclient : 2.1.4 httpclient : 2.1.2 rubyforge : 0.4.5
gemのバージョン取得もこれを使った方がよい気がする。requireとかをしなくてもいいし。