This is a Ruby tree! It shows every object from the Ruby Programming Language in a tree format.

Pathname

        # Pathname < Object

(from ruby core)
---

Pathname represents the name of a file or directory on the filesystem,
but not the file itself.

The pathname depends on the Operating System: Unix, Windows, etc. This
library works with pathnames of local OS, however non-Unix pathnames are
supported experimentally.

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 goal 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.  None of these access the file system except for
#mountpoint?, #children, #each_child, #realdirpath and #realpath.

*   +
*   #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
*   #birthtime
*   #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)
*   #write(*args)
*   #binwrite(*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 methods:

    getwd
    glob
    new
    pwd

# Instance methods:

    +
    /
    <=>
    ==
    ===
    absolute?
    ascend
    atime
    basename
    binread
    binwrite
    birthtime
    blockdev?
    chardev?
    children
    chmod
    chown
    cleanpath
    ctime
    delete
    descend
    directory?
    dirname
    each_child
    each_entry
    each_filename
    each_line
    empty?
    entries
    eql?
    executable?
    executable_real?
    exist?
    expand_path
    extname
    file?
    find
    fnmatch
    fnmatch?
    freeze
    ftype
    glob
    grpowned?
    join
    lchmod
    lchown
    lstat
    make_link
    make_symlink
    mkdir
    mkpath
    mountpoint?
    mtime
    open
    opendir
    owned?
    parent
    pipe?
    read
    readable?
    readable_real?
    readlines
    readlink
    realdirpath
    realpath
    relative?
    relative_path_from
    rename
    rmdir
    rmtree
    root?
    setgid?
    setuid?
    size
    size?
    socket?
    split
    stat
    sticky?
    sub
    sub_ext
    symlink?
    sysopen
    taint
    to_path
    to_s
    truncate
    unlink
    untaint
    utime
    world_readable?
    world_writable?
    writable?
    writable_real?
    write
    zero?


      

This is MURDOC! A Ruby documentation browser inspired by Smalltalk-80. It allows you to learn about Ruby by browsing through its class hierarchies, and see any of its methods.