module FileTest

Constants

SEPARATOR_PATTERN

Public Instance Methods

absolute?(path) click to toggle source

Predicate method for testing whether a path is absolute. It returns true if the pathname begins with a slash.

# File lib/core/facets/filetest/relative.rb, line 9
def absolute?(path)
  !relative?(path)
end
chop_basename(path) click to toggle source

List File.split, but preserves the file separators.

FileTest.chop_basename('/usr/lib') #=> ['/usr/', 'lib']
FileTest.chop_basename('/') #=> nil

Returns Array of `[pre-basename, basename]` or `nil`.

This method is here simply to support the #relative? and #absolute? methods.

# File lib/core/facets/filetest/relative.rb, line 29
def chop_basename(path)
  base = File.basename(path)
  if /\A#{SEPARATOR_PATTERN}?\z/ =~ base
    return nil
  else
    return path[0, path.rindex(base)], base
  end
end
contains?(child, parent=Dir.pwd) click to toggle source

Does the parent contain the child?

# File lib/core/facets/filetest/contains.rb, line 6
def contains?(child, parent=Dir.pwd)
  parent = File.expand_path(parent)
  child = File.expand_path(child)
  child.sub(parent,'') != child
end
relative?(path) click to toggle source

The opposite of #absolute?

# File lib/core/facets/filetest/relative.rb, line 14
def relative?(path)
  while r = chop_basename(path.to_s)
    path, basename = r
  end
  path == ''
end
root?(dir=nil) click to toggle source

Is the specified directory the root directory?

CREDIT: Jeffrey Schwab

# File lib/core/facets/filetest/root.rb, line 9
def root?(dir=nil)
  pth = File.expand_path(dir||Dir.pwd)
  return true if pth == '/'
  return true if pth =~ /^(\w:)?\/$/
  false
end
safe?(path) click to toggle source

Is a path considered reasonably “safe”?

Do not mistake this for a perfect solution!

# File lib/core/facets/filetest/safe.rb, line 10
def safe?(path)
  case path
  when /\A(#{SEPARATOR_PATTERN}|\~)(#{SEPARATOR_PATTERN}|\*)+/
    false
  else
    true
  end
end