1
0
Fork 0
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:
akr 2010-07-29 21:13:34 +00:00
parent 3608baa990
commit 8db76b2135
2 changed files with 177 additions and 177 deletions

View file

@ -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:

View file

@ -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()
{ {