FrontPage  Index  Search  Changes  RSS  wikifarm  Login

load_path.rb

概要

$LOAD_PATH($:)にパスを設定するためのメソッド。

load_path ・・ load_path.rb が存在するディレクトリを $: に追加する。(既に在る場合には先頭に移動する、以下同じ)。

* RUBY_LIBが設定されていない環境(cronでの実行の場合など)に、load_path がライブラリ用のディレクトリに在るときに、スクリプトの所在地からなんとかして load_path を require すれば、簡単にライブラリのパスを設定することができる。

require File.join(File.dirname(__FILE__),"../../tkUtils/load_path")
load_path # load_pathの所在ディレクトリ(ライブラリパス)を追加。

load_path __FILE__ ・・ これが記述されているスクリプトの所在ディレクトリを $: に追加する。

load_path __FILE__ , "/lib" ・・ __FILE__ の所在ディレクトリのサブディレクトリを $: に追加する


依存性

  1. Linux でも Windowsでもつかえます。Windows ではパスの大文字小文字を無視して判断します。

利用者


実行見本:

1.jpg

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

(comment plugin is disabled).

説明


ソース:

load_path.rb

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

#
#  どうにかして load_path を require する。
#  require File.join(File.dirname(__FILE__),"../../tkUtils/load_path")
#
#  load_path.rb があるディレクトリを $LOAD_PATH に追加する
#  load_path
#
#  自分の所在地を $LOAD_PATH に追加する
#  load_path __FILE__
#
#  自分の所在地のサブディレクトリを $LOAD_PATH に追加する
#  load_path __FILE__ , "/lib"
#
#  [ruby-list:34151]
#
#  問題点:
#  $LOAD_PATH を uniq にするのだが、Windowsでは小文字にしてしまう。

require File.dirname(__FILE__)+"/Array_insert" if RUBY_VERSION < "1.7"

if /win32/ =~ RUBY_PLATFORM 
  def load_path_uniq
    $LOAD_PATH.replace( $LOAD_PATH.collect{|n| n.downcase }.uniq )
  end
  def load_path_delete(path,check_dir=true)
    path = File.dirname(path) if check_dir && FileTest.file?( path )
    $LOAD_PATH.delete_if{|n| n.downcase == path.downcase }
  end
else
  def load_path_uniq
    $LOAD_PATH.uniq!
  end
  def load_path_delete(path,check_dir=true)
    path = File.dirname(path) if check_dir && FileTest.file?( path )
    $LOAD_PATH.delete(path)
  end
end

def load_path_add( path=:load_path , subdir=nil , offset=0)
  path = __FILE__ if :load_path == path
  path = File.dirname(path) if FileTest.file? path
  path = path+"/" if subdir && (subdir[0] != ?/) && (path[-1] != ?/) # 2004-01-05(月)
  path = File.expand_path( path + subdir.to_s )
  raise "not dir #{path}" unless FileTest.directory? path
  load_path_delete(path, false)
  $LOAD_PATH.insert( offset , path )
  load_path_uniq
end
alias load_path load_path_add

if __FILE__ == $0

require "Array_tree"

  p 'ENV["RUBYLIB"]'
  puts  ENV["RUBYLIB"].split(";").tree

  p '$: .. 初期状態'
  puts  $:.tree

  p "load_path は引数なしでは load_path.rb があるディレクトリをセットする。"
  p 'load_path'
  load_path
  puts  $:.tree

if /win32/ =~ RUBY_PLATFORM 
  path = "c:/"
else
  path = "/usr/bin/"
end
  p "ディレクトリ '#{path}' を指定すれば、それが先頭にセットされる。"
  p "load_path '#{path}'"
  load_path path
  puts  $:.tree

  p "第一引数がファイルの場合にはそれが存在するディレクトリとして扱われる。"
  p 'load_path __FILE__'
  load_path __FILE__
  puts  $:.tree

  p "第2引数にサブディレクトリを指定すると、第一引数のディレクトリのサブディレクトリとして扱われる。"
  p 'load_path __FILE__, "WIN32API"'
  load_path __FILE__, "WIN32API"
  puts  $:.tree

  p "第3引数で挿入場所を指定することができる。-1 なら一番最後に挿入(移動)する。"
  p 'load_path __FILE__, "win32api", -1'
  load_path __FILE__, "win32api", -1
  puts  $:.tree

end

Last modified:2006/08/18 15:53:52
Keyword(s):
References: