1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/tool/vpath.rb
nobu d22ac50ad4 tool/vpath.rb
* tool/generic_erb.rb, tool/id2token.rb: add --path-separator option
  for mingw where make and built ruby live in different world.
* tool/vpath.rb: extract from tool/instruction.rb.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-29 08:12:29 +00:00

79 lines
1.5 KiB
Ruby

# -*- coding: us-ascii -*-
class VPath
attr_accessor :separator
def initialize(*list)
@list = list
@additional = []
@separator = File::PATH_SEPARATOR
end
def inspect
list.inspect
end
def search(meth, base, *rest)
begin
meth.call(base, *rest)
rescue Errno::ENOENT => error
list.each do |dir|
return meth.call(File.join(dir, base), *rest) rescue nil
end
raise error
end
end
def process(*args, &block)
search(File.method(__callee__), *args, &block)
end
alias stat process
alias lstat process
def open(*args)
f = search(File.method(:open), *args)
if block_given?
begin
yield f
ensure
f.close unless f.closed?
end
else
f
end
end
def read(*args)
open(*args) {|f| f.read}
end
def foreach(file, *args, &block)
open(file) {|f| f.each(*args, &block)}
end
def def_options(opt)
opt.on("-I", "--srcdir=DIR", "add a directory to search path") {|dir|
@additional << dir
}
opt.on("-L", "--vpath=PATH LIST", "add directories to search path") {|dirs|
@additional << [dirs]
}
opt.on("--path-separator=SEP", /\A\W\z/, "separator for vpath") {|sep|
@separator = sep
}
end
def list
@additional.reject! do |dirs|
case dirs
when String
@list << dirs
when Array
@list.concat(dirs[0].split(@separator))
end
true
end
@list
end
end