mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
class description document moved.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28789 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3608baa990
commit
8db76b2135
2 changed files with 177 additions and 177 deletions
|
@ -13,183 +13,6 @@
|
||||||
|
|
||||||
require 'pathname.so'
|
require 'pathname.so'
|
||||||
|
|
||||||
#
|
|
||||||
# == Pathname
|
|
||||||
#
|
|
||||||
# Pathname represents a pathname which locates a file in a filesystem.
|
|
||||||
# The pathname depends on OS: Unix, Windows, etc.
|
|
||||||
# Pathname library works with pathnames of local OS.
|
|
||||||
# However non-Unix pathnames are supported experimentally.
|
|
||||||
#
|
|
||||||
# It does not represent the file itself.
|
|
||||||
# A Pathname can be relative or absolute. It's not until you try to
|
|
||||||
# reference the file that it even matters whether the file exists or not.
|
|
||||||
#
|
|
||||||
# Pathname is immutable. It has no method for destructive update.
|
|
||||||
#
|
|
||||||
# The value of this class is to manipulate file path information in a neater
|
|
||||||
# way than standard Ruby provides. The examples below demonstrate the
|
|
||||||
# difference. *All* functionality from File, FileTest, and some from Dir and
|
|
||||||
# FileUtils is included, in an unsurprising way. It is essentially a facade for
|
|
||||||
# all of these, and more.
|
|
||||||
#
|
|
||||||
# == Examples
|
|
||||||
#
|
|
||||||
# === Example 1: Using Pathname
|
|
||||||
#
|
|
||||||
# require 'pathname'
|
|
||||||
# pn = Pathname.new("/usr/bin/ruby")
|
|
||||||
# size = pn.size # 27662
|
|
||||||
# isdir = pn.directory? # false
|
|
||||||
# dir = pn.dirname # Pathname:/usr/bin
|
|
||||||
# base = pn.basename # Pathname:ruby
|
|
||||||
# dir, base = pn.split # [Pathname:/usr/bin, Pathname:ruby]
|
|
||||||
# data = pn.read
|
|
||||||
# pn.open { |f| _ }
|
|
||||||
# pn.each_line { |line| _ }
|
|
||||||
#
|
|
||||||
# === Example 2: Using standard Ruby
|
|
||||||
#
|
|
||||||
# pn = "/usr/bin/ruby"
|
|
||||||
# size = File.size(pn) # 27662
|
|
||||||
# isdir = File.directory?(pn) # false
|
|
||||||
# dir = File.dirname(pn) # "/usr/bin"
|
|
||||||
# base = File.basename(pn) # "ruby"
|
|
||||||
# dir, base = File.split(pn) # ["/usr/bin", "ruby"]
|
|
||||||
# data = File.read(pn)
|
|
||||||
# File.open(pn) { |f| _ }
|
|
||||||
# File.foreach(pn) { |line| _ }
|
|
||||||
#
|
|
||||||
# === Example 3: Special features
|
|
||||||
#
|
|
||||||
# p1 = Pathname.new("/usr/lib") # Pathname:/usr/lib
|
|
||||||
# p2 = p1 + "ruby/1.8" # Pathname:/usr/lib/ruby/1.8
|
|
||||||
# p3 = p1.parent # Pathname:/usr
|
|
||||||
# p4 = p2.relative_path_from(p3) # Pathname:lib/ruby/1.8
|
|
||||||
# pwd = Pathname.pwd # Pathname:/home/gavin
|
|
||||||
# pwd.absolute? # true
|
|
||||||
# p5 = Pathname.new "." # Pathname:.
|
|
||||||
# p5 = p5 + "music/../articles" # Pathname:music/../articles
|
|
||||||
# p5.cleanpath # Pathname:articles
|
|
||||||
# p5.realpath # Pathname:/home/gavin/articles
|
|
||||||
# p5.children # [Pathname:/home/gavin/articles/linux, ...]
|
|
||||||
#
|
|
||||||
# == Breakdown of functionality
|
|
||||||
#
|
|
||||||
# === Core methods
|
|
||||||
#
|
|
||||||
# These methods are effectively manipulating a String, because that's
|
|
||||||
# all a path is. Except for #mountpoint?, #children, #each_child,
|
|
||||||
# #realdirpath and #realpath, they don't access the filesystem.
|
|
||||||
#
|
|
||||||
# - +
|
|
||||||
# - #join
|
|
||||||
# - #parent
|
|
||||||
# - #root?
|
|
||||||
# - #absolute?
|
|
||||||
# - #relative?
|
|
||||||
# - #relative_path_from
|
|
||||||
# - #each_filename
|
|
||||||
# - #cleanpath
|
|
||||||
# - #realpath
|
|
||||||
# - #realdirpath
|
|
||||||
# - #children
|
|
||||||
# - #each_child
|
|
||||||
# - #mountpoint?
|
|
||||||
#
|
|
||||||
# === File status predicate methods
|
|
||||||
#
|
|
||||||
# These methods are a facade for FileTest:
|
|
||||||
# - #blockdev?
|
|
||||||
# - #chardev?
|
|
||||||
# - #directory?
|
|
||||||
# - #executable?
|
|
||||||
# - #executable_real?
|
|
||||||
# - #exist?
|
|
||||||
# - #file?
|
|
||||||
# - #grpowned?
|
|
||||||
# - #owned?
|
|
||||||
# - #pipe?
|
|
||||||
# - #readable?
|
|
||||||
# - #world_readable?
|
|
||||||
# - #readable_real?
|
|
||||||
# - #setgid?
|
|
||||||
# - #setuid?
|
|
||||||
# - #size
|
|
||||||
# - #size?
|
|
||||||
# - #socket?
|
|
||||||
# - #sticky?
|
|
||||||
# - #symlink?
|
|
||||||
# - #writable?
|
|
||||||
# - #world_writable?
|
|
||||||
# - #writable_real?
|
|
||||||
# - #zero?
|
|
||||||
#
|
|
||||||
# === File property and manipulation methods
|
|
||||||
#
|
|
||||||
# These methods are a facade for File:
|
|
||||||
# - #atime
|
|
||||||
# - #ctime
|
|
||||||
# - #mtime
|
|
||||||
# - #chmod(mode)
|
|
||||||
# - #lchmod(mode)
|
|
||||||
# - #chown(owner, group)
|
|
||||||
# - #lchown(owner, group)
|
|
||||||
# - #fnmatch(pattern, *args)
|
|
||||||
# - #fnmatch?(pattern, *args)
|
|
||||||
# - #ftype
|
|
||||||
# - #make_link(old)
|
|
||||||
# - #open(*args, &block)
|
|
||||||
# - #readlink
|
|
||||||
# - #rename(to)
|
|
||||||
# - #stat
|
|
||||||
# - #lstat
|
|
||||||
# - #make_symlink(old)
|
|
||||||
# - #truncate(length)
|
|
||||||
# - #utime(atime, mtime)
|
|
||||||
# - #basename(*args)
|
|
||||||
# - #dirname
|
|
||||||
# - #extname
|
|
||||||
# - #expand_path(*args)
|
|
||||||
# - #split
|
|
||||||
#
|
|
||||||
# === Directory methods
|
|
||||||
#
|
|
||||||
# These methods are a facade for Dir:
|
|
||||||
# - Pathname.glob(*args)
|
|
||||||
# - Pathname.getwd / Pathname.pwd
|
|
||||||
# - #rmdir
|
|
||||||
# - #entries
|
|
||||||
# - #each_entry(&block)
|
|
||||||
# - #mkdir(*args)
|
|
||||||
# - #opendir(*args)
|
|
||||||
#
|
|
||||||
# === IO
|
|
||||||
#
|
|
||||||
# These methods are a facade for IO:
|
|
||||||
# - #each_line(*args, &block)
|
|
||||||
# - #read(*args)
|
|
||||||
# - #binread(*args)
|
|
||||||
# - #readlines(*args)
|
|
||||||
# - #sysopen(*args)
|
|
||||||
#
|
|
||||||
# === Utilities
|
|
||||||
#
|
|
||||||
# These methods are a mixture of Find, FileUtils, and others:
|
|
||||||
# - #find(&block)
|
|
||||||
# - #mkpath
|
|
||||||
# - #rmtree
|
|
||||||
# - #unlink / #delete
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# == Method documentation
|
|
||||||
#
|
|
||||||
# As the above section shows, most of the methods in Pathname are facades. The
|
|
||||||
# documentation for these methods generally just says, for instance, "See
|
|
||||||
# FileTest.writable?", as you should be familiar with the original method
|
|
||||||
# anyway, and its documentation (e.g. through +ri+) will contain more
|
|
||||||
# information. In some cases, a brief description will follow.
|
|
||||||
#
|
|
||||||
class Pathname
|
class Pathname
|
||||||
|
|
||||||
# :stopdoc:
|
# :stopdoc:
|
||||||
|
|
|
@ -119,6 +119,183 @@ path_cmp(VALUE self, VALUE other)
|
||||||
return INT2FIX(0);
|
return INT2FIX(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* == Pathname
|
||||||
|
*
|
||||||
|
* Pathname represents a pathname which locates a file in a filesystem.
|
||||||
|
* The pathname depends on OS: Unix, Windows, etc.
|
||||||
|
* Pathname library works with pathnames of local OS.
|
||||||
|
* However non-Unix pathnames are supported experimentally.
|
||||||
|
*
|
||||||
|
* It does not represent the file itself.
|
||||||
|
* A Pathname can be relative or absolute. It's not until you try to
|
||||||
|
* reference the file that it even matters whether the file exists or not.
|
||||||
|
*
|
||||||
|
* Pathname is immutable. It has no method for destructive update.
|
||||||
|
*
|
||||||
|
* The value of this class is to manipulate file path information in a neater
|
||||||
|
* way than standard Ruby provides. The examples below demonstrate the
|
||||||
|
* difference. *All* functionality from File, FileTest, and some from Dir and
|
||||||
|
* FileUtils is included, in an unsurprising way. It is essentially a facade for
|
||||||
|
* all of these, and more.
|
||||||
|
*
|
||||||
|
* == Examples
|
||||||
|
*
|
||||||
|
* === Example 1: Using Pathname
|
||||||
|
*
|
||||||
|
* require 'pathname'
|
||||||
|
* pn = Pathname.new("/usr/bin/ruby")
|
||||||
|
* size = pn.size # 27662
|
||||||
|
* isdir = pn.directory? # false
|
||||||
|
* dir = pn.dirname # Pathname:/usr/bin
|
||||||
|
* base = pn.basename # Pathname:ruby
|
||||||
|
* dir, base = pn.split # [Pathname:/usr/bin, Pathname:ruby]
|
||||||
|
* data = pn.read
|
||||||
|
* pn.open { |f| _ }
|
||||||
|
* pn.each_line { |line| _ }
|
||||||
|
*
|
||||||
|
* === Example 2: Using standard Ruby
|
||||||
|
*
|
||||||
|
* pn = "/usr/bin/ruby"
|
||||||
|
* size = File.size(pn) # 27662
|
||||||
|
* isdir = File.directory?(pn) # false
|
||||||
|
* dir = File.dirname(pn) # "/usr/bin"
|
||||||
|
* base = File.basename(pn) # "ruby"
|
||||||
|
* dir, base = File.split(pn) # ["/usr/bin", "ruby"]
|
||||||
|
* data = File.read(pn)
|
||||||
|
* File.open(pn) { |f| _ }
|
||||||
|
* File.foreach(pn) { |line| _ }
|
||||||
|
*
|
||||||
|
* === Example 3: Special features
|
||||||
|
*
|
||||||
|
* p1 = Pathname.new("/usr/lib") # Pathname:/usr/lib
|
||||||
|
* p2 = p1 + "ruby/1.8" # Pathname:/usr/lib/ruby/1.8
|
||||||
|
* p3 = p1.parent # Pathname:/usr
|
||||||
|
* p4 = p2.relative_path_from(p3) # Pathname:lib/ruby/1.8
|
||||||
|
* pwd = Pathname.pwd # Pathname:/home/gavin
|
||||||
|
* pwd.absolute? # true
|
||||||
|
* p5 = Pathname.new "." # Pathname:.
|
||||||
|
* p5 = p5 + "music/../articles" # Pathname:music/../articles
|
||||||
|
* p5.cleanpath # Pathname:articles
|
||||||
|
* p5.realpath # Pathname:/home/gavin/articles
|
||||||
|
* p5.children # [Pathname:/home/gavin/articles/linux, ...]
|
||||||
|
*
|
||||||
|
* == Breakdown of functionality
|
||||||
|
*
|
||||||
|
* === Core methods
|
||||||
|
*
|
||||||
|
* These methods are effectively manipulating a String, because that's
|
||||||
|
* all a path is. Except for #mountpoint?, #children, #each_child,
|
||||||
|
* #realdirpath and #realpath, they don't access the filesystem.
|
||||||
|
*
|
||||||
|
* - +
|
||||||
|
* - #join
|
||||||
|
* - #parent
|
||||||
|
* - #root?
|
||||||
|
* - #absolute?
|
||||||
|
* - #relative?
|
||||||
|
* - #relative_path_from
|
||||||
|
* - #each_filename
|
||||||
|
* - #cleanpath
|
||||||
|
* - #realpath
|
||||||
|
* - #realdirpath
|
||||||
|
* - #children
|
||||||
|
* - #each_child
|
||||||
|
* - #mountpoint?
|
||||||
|
*
|
||||||
|
* === File status predicate methods
|
||||||
|
*
|
||||||
|
* These methods are a facade for FileTest:
|
||||||
|
* - #blockdev?
|
||||||
|
* - #chardev?
|
||||||
|
* - #directory?
|
||||||
|
* - #executable?
|
||||||
|
* - #executable_real?
|
||||||
|
* - #exist?
|
||||||
|
* - #file?
|
||||||
|
* - #grpowned?
|
||||||
|
* - #owned?
|
||||||
|
* - #pipe?
|
||||||
|
* - #readable?
|
||||||
|
* - #world_readable?
|
||||||
|
* - #readable_real?
|
||||||
|
* - #setgid?
|
||||||
|
* - #setuid?
|
||||||
|
* - #size
|
||||||
|
* - #size?
|
||||||
|
* - #socket?
|
||||||
|
* - #sticky?
|
||||||
|
* - #symlink?
|
||||||
|
* - #writable?
|
||||||
|
* - #world_writable?
|
||||||
|
* - #writable_real?
|
||||||
|
* - #zero?
|
||||||
|
*
|
||||||
|
* === File property and manipulation methods
|
||||||
|
*
|
||||||
|
* These methods are a facade for File:
|
||||||
|
* - #atime
|
||||||
|
* - #ctime
|
||||||
|
* - #mtime
|
||||||
|
* - #chmod(mode)
|
||||||
|
* - #lchmod(mode)
|
||||||
|
* - #chown(owner, group)
|
||||||
|
* - #lchown(owner, group)
|
||||||
|
* - #fnmatch(pattern, *args)
|
||||||
|
* - #fnmatch?(pattern, *args)
|
||||||
|
* - #ftype
|
||||||
|
* - #make_link(old)
|
||||||
|
* - #open(*args, &block)
|
||||||
|
* - #readlink
|
||||||
|
* - #rename(to)
|
||||||
|
* - #stat
|
||||||
|
* - #lstat
|
||||||
|
* - #make_symlink(old)
|
||||||
|
* - #truncate(length)
|
||||||
|
* - #utime(atime, mtime)
|
||||||
|
* - #basename(*args)
|
||||||
|
* - #dirname
|
||||||
|
* - #extname
|
||||||
|
* - #expand_path(*args)
|
||||||
|
* - #split
|
||||||
|
*
|
||||||
|
* === Directory methods
|
||||||
|
*
|
||||||
|
* These methods are a facade for Dir:
|
||||||
|
* - Pathname.glob(*args)
|
||||||
|
* - Pathname.getwd / Pathname.pwd
|
||||||
|
* - #rmdir
|
||||||
|
* - #entries
|
||||||
|
* - #each_entry(&block)
|
||||||
|
* - #mkdir(*args)
|
||||||
|
* - #opendir(*args)
|
||||||
|
*
|
||||||
|
* === IO
|
||||||
|
*
|
||||||
|
* These methods are a facade for IO:
|
||||||
|
* - #each_line(*args, &block)
|
||||||
|
* - #read(*args)
|
||||||
|
* - #binread(*args)
|
||||||
|
* - #readlines(*args)
|
||||||
|
* - #sysopen(*args)
|
||||||
|
*
|
||||||
|
* === Utilities
|
||||||
|
*
|
||||||
|
* These methods are a mixture of Find, FileUtils, and others:
|
||||||
|
* - #find(&block)
|
||||||
|
* - #mkpath
|
||||||
|
* - #rmtree
|
||||||
|
* - #unlink / #delete
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* == Method documentation
|
||||||
|
*
|
||||||
|
* As the above section shows, most of the methods in Pathname are facades. The
|
||||||
|
* documentation for these methods generally just says, for instance, "See
|
||||||
|
* FileTest.writable?", as you should be familiar with the original method
|
||||||
|
* anyway, and its documentation (e.g. through +ri+) will contain more
|
||||||
|
* information. In some cases, a brief description will follow.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
Init_pathname()
|
Init_pathname()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue