Class: File
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/yard/core_ext/file.rb |
Constant Summary
-
RELATIVE_PARENTDIR =
# File 'lib/yard/core_ext/file.rb', line 5'..'
-
RELATIVE_SAMEDIR =
# File 'lib/yard/core_ext/file.rb', line 6'.'
Manipulating Paths
-
.cleanpath(path, rel_root = false) ⇒ String
Cleans a path by removing extraneous '..', '.' and '/' characters.
-
.relative_path(from, to) ⇒ String
Turns a path
to
into a relative path from starting pointfrom
.
Reading Files
-
.open!(file, *args, &block)
Forces opening a file (for writing) by first creating the file's directory.
-
.read_binary(file) ⇒ String
Reads a file with binary encoding.
Class Method Details
.cleanpath(path, rel_root = false) ⇒ String
Cleans a path by removing extraneous '..', '.' and '/' characters
# File 'lib/yard/core_ext/file.rb', line 37
def self.cleanpath(path, rel_root = false) path = path.split(SEPARATOR) path = path.inject([]) do |acc, comp| next acc if comp == RELATIVE_SAMEDIR if comp == RELATIVE_PARENTDIR && !acc.empty? && acc.last != RELATIVE_PARENTDIR acc.pop next acc elsif !rel_root && comp == RELATIVE_PARENTDIR && acc.empty? next acc end acc << comp end File.join(*path) end
.open!(file, *args, &block)
Forces opening a file (for writing) by first creating the file's directory
# File 'lib/yard/core_ext/file.rb', line 57
def self.open!(file, *args, &block) dir = dirname(file) FileUtils.mkdir_p(dir) unless directory?(dir) open(file, *args, &block) end
.read_binary(file) ⇒ String
Reads a file with binary encoding
# File 'lib/yard/core_ext/file.rb', line 66
def self.read_binary(file) File.open(file, 'rb', &:read) end
.relative_path(from, to) ⇒ String
Turns a path to
into a relative path from starting
point from
. The argument from
is assumed to be
a filename. To treat it as a directory, make sure it
ends in File::SEPARATOR
('/' on UNIX filesystems).
# File 'lib/yard/core_ext/file.rb', line 19
def self.relative_path(from, to) from = (from).split(SEPARATOR) to = (to).split(SEPARATOR) from.length.times do break if from[0] != to[0] from.shift; to.shift end from.pop join(*(from.map { RELATIVE_PARENTDIR } + to)) end