It seems FileTest lacks a relative? method (and conversely absolute?). I need such a method. I went to write one but found my self not
100% certain about it being cross-platform. I wrote:
module FileTest
module_function
def relative?(path)
/\A[\/\\]/ !~ File.expand_path(path)
end
end
To put it in English, I expand the path and then simply check for a
leading ‘/’ or ‘’.
I noticed Pathname has a relative? method and I looked at it. It’s
seems a bit bulky:
if File::ALT_SEPARATOR
SEPARATOR_LIST = "#{Regexp.quote File::ALT_SEPARATOR}
def relative?
path = @path
while r = chop_basename(path)
path, basename = r
end
path == ''
end
def chop_basename(path)
base = File.basename(path)
if /\A#{SEPARATOR_PAT}?\z/o =~ base
return nil
else
return path[0, path.rindex(base)], base
end
end
private :chop_basename
Is all that really necessary? My version may be too simplistic, but
surely there is more concise way to do this?
On Tue, Dec 21, 2010 at 3:35 PM, Intransition [email protected]
wrote:
It seems FileTest lacks a relative? method (and conversely absolute? ). I need such a method. I went to write one but found my self not
100% certain about it being cross-platform. I wrote:
Pathname has both #absolute? and #relative?, as well as some other
nice methods for figuring out what a path means. Maybe look there?
On Windows, a path without a drive letter that only starts in a single
backslash would be relative (becuase it’s relative to the current drive
letter.) A double backslash would be an absolute UNC name.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.