requireできるファイルを調べるメソッド
ライブラリの名前がうろ覚えだったりするときにirbでちょちょっと調べられるように次のようなメソッドを書いてみました。もっと良さそうな名前があれば募集中です。*1
def requirable_files(regex=nil) load_path = $LOAD_PATH.reject {|i| i =~ /^\.$/ } load_path = load_path.inject([]) do |arr,dir| arr.concat( Dir.glob("#{dir}/**/*.{rb, so}").map do |i| i.sub("#{dir}/", "").sub(/\.(rb|so)/, "") end) end load_path = load_path.select {|i| i =~ regex } unless regex.nil? load_path.each {|i| p i} end if $0 == __FILE__ p requirable_files(/test/) end # "runit/testresult" # "runit/testcase" # "runit/testsuite" # ..... # => ["runit/testresult", "runit/testcase", "runit/testsuite", "runit/cui/testrunner", "test/unit", "test/unit/assertionfailederror", "test/unit/assertions", "test/unit/autorunner", "test/unit/collector", "test/unit/error", "test/unit/failure", "test/unit/testcase, ...]
Dir.globで再帰的に探索してるので$LOAD_PATHからカレントディレクトリは除外してあります。
ちなみに戻り値は正規表現に合致したパスの配列なので、そのまままとめてrequireとかも出来そうです。
それにしてもメソッドチェーンが長くなるとどうやってうまく書こうか悩むなぁ。あまり長いと分かりづらいので結局短めに区切ったけど。
*1:irbだから補完は効くのだけどちょっと長いので。