FrontPage  Index  Search  Changes  RSS  wikifarm  Login

required.rb

概要

実際にロードされているファイルのフルパスを推定する。

require "required"
puts required

でロードされている可能性の高いファイルのリストを表示します。

ファイル名の重複によるトラブルの原因を発見することができます。


依存性

  1. Linux でも Windowsでもつかえます。

利用者


実行見本:

require "date" でどれくらいのファイルがロードされているかを表示してみます。

[tk@EDiCube-04 tkUtils]$ ruby -r"date" -r"required" -e "puts required"
/usr/local/lib/ruby/1.8/date.rb (date.rb)
/usr/local/lib/ruby/1.8/date/format.rb (date/format.rb)
/usr/local/lib/ruby/1.8/rational.rb (rational.rb)
/mnt/EDiCube-02/samba_public/apollo/tkUtils/required.rb (required.rb)
[tk@EDiCube-04 tkUtils]$

コメントがありましたらどうぞ

(comment plugin is disabled).

説明


ソース:

required.rb

#! ruby -Ks
#-- required.rb
#-- required.pi

# load されたファイルの名前の一覧表である $" から
# 実際にロードされているファイルのフルパスを推定する。

def required_files(mask=nil)
  mask = Regexp.new(mask,true) if mask.is_a? String
  ret = []
  names = $"
  dirs  = $:.collect{|line|line.downcase}.uniq
  names.each{|name|
    next if mask && !(mask =~ name)
    dirs.each{|dir|
      path = File.expand_path(dir+"/"+name)
      if FileTest.file? path
        ret.push([path,name])
        next
      end
      path = File.expand_path(dir+"/"+name+".rb")
      if FileTest.file? path
        ret.push([path,name])
        next
      end
      path = File.expand_path(dir+"/"+name+".so")
      if FileTest.file? path
        ret.push([path,name])
        next
      end
    }
  }
  ret.sort_by{|a|
    name = a[1].downcase
    name = (/.+\/(.+)$/ =~ name) ? $1 : name
    name + a[0].downcase
  }.collect{|a|"%s (%s)" % [a[0],a[1]]}
end
alias required required_files

if __FILE__ == $0
require "vfs"
puts required
    #=> c:/program files/apollo/lib/ruby/1.8/uri/common.rb (uri/common.rb)
    #=> c:/program files/apollo/lib/dialogs.so (dialogs.so)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/ftp.rb (uri/ftp.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/generic.rb (uri/generic.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/http.rb (uri/http.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/https.rb (uri/https.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/ldap.rb (uri/ldap.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/mailto.rb (uri/mailto.rb)
    #=> c:/program files/apollo/bin/phi.rb (phi.rb)
    #=> c:/program files/apollo/bin/phi.so (phi.so)
    #=> c:/program files/apollo/lib/ruby/1.8/uri.rb (uri.rb)
    #=> c:/program files/apollo/lib/ruby/site_ruby/1.8/vfs.rb (vfs.rb)
    #=> g:/apollo/tkutils/vfs.rb (vfs.rb)
    #=> G:/Apollo/tkUtils/vfs.rb (vfs.rb)
    #=> c:/program files/apollo/bin/win32.rb (win32.rb)

# ライブラリ名が衝突していることを発見!
puts required(/vfs/i)
    #=> c:/program files/apollo/lib/ruby/site_ruby/1.8/vfs.rb (vfs.rb)
    #=> g:/apollo/tkutils/vfs.rb (vfs.rb)
    #=> G:/Apollo/tkUtils/vfs.rb (vfs.rb)

# マスクは name部分(「()」の中)で判別する。
puts required(/uri/)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/common.rb (uri/common.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/ftp.rb (uri/ftp.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/generic.rb (uri/generic.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/http.rb (uri/http.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/https.rb (uri/https.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/ldap.rb (uri/ldap.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri/mailto.rb (uri/mailto.rb)
    #=> c:/program files/apollo/lib/ruby/1.8/uri.rb (uri.rb)

end

Last modified:2006/06/27 15:39:41
Keyword(s):
References: