Module RIO::IF::Path lib/rio/if/path.rb   

Methods

/   abs   base   basename   basename=   cleanpath   dirname   dirname=   expand_path   ext   ext?   extname   extname=   filename   filename=   fspath   host   join   join!   merge   noext   opaque   path   realpath   rel   route_from   route_to   scheme   splitpath   to_uri   to_url   urlpath  

Public Instance methods

Subdirectory operator.

Effectively the same as join(arg)

  a = rio('a')
  b = rio('b')
  c = a/b                   #=> rio('a/b')

  ario = rio('adir')
  ario/'afile.rb'           #=> rio('adir/afile.rb')
  ario/'b'/'c'/'d'          #=> rio('adir/b/c/d')

  ario = rio('adir')
  ario /= 'afile.rb'        #=> rio('adir/afile.rb')

Returns a new rio with a path equal to the absolute path of this rio

 rio('/tmp').chdir
 rio('afile').abs # => rio('/tmp/afile')

Returns a new Rio whose path is the base path that is used by abs to create an absolute Rio from a relative one.

 rio('/tmp').chdir
 rio('afile').base # => rio('/tmp/')

See abs.

Similar to File#basename

Returns a Rio whose path is that returned by File#basename when passed the path of a rio and the value returned by File#extname. This differs from the behaviour of File#basename.

 File.basename('afile.txt')                           #=> 'afile.txt'
 File.basename('afile.txt',File.extname('afile.txt')) #=> 'afile'
 rio('afile.txt').basename                            #=> rio('afile')
 rio('afile.txt').basename('.txt')                    #=> same thing
 rio('afile.txt').ext('.txt').basename                #=> same thing

See also ext,ext?,filename,

Replace the part of the path returned by basename. If in rename mode, also renames the referenced filesystem object.

Returns the new value of basename

  ario = rio('dirA/dirB/afile.rb')
  ario.dirname = 'dirC'          # rio('dirC/afile.rb')
  ario.basename = 'bfile'        # rio('dirC/bfile.rb')
  ario.extname = '.txt'          # rio('dirC/bfile.txt')
  ario.filename = 'cfile.rb'     # rio('dirC/cfile.rb')

  rio('adir/afile.txt').rename.filename = 'bfile.rb' # adir/afile.txt => adir/bfile.rb
  rio('adir/afile.txt').rename.basename = 'bfile'    # adir/afile.txt => adir/bfile.txt
  rio('adir/afile.txt').rename.extname  = '.rb'      # adir/afile.txt => adir/afile.rb
  rio('adir/afile.txt').rename.dirname =  'b/c'      # adir/afile.txt => b/c/afile.txt

See basename, rename

Calls Pathname#cleanpath

Returns a new Rio whose path is the clean pathname of self with consecutive slashes and useless dots removed. The filesystem is not accessed.

If consider_symlink is true, then a more conservative algorithm is used to avoid breaking symbolic linkages. This may retain more .. entries than absolutely necessary, but without accessing the filesystem, this can’t be avoided. See realpath.

Calls File#dirname

Returns a new Rio referencing the directory portion of a Rio.

   rio('/tmp/zippy.txt').dirname   #=> rio('/tmp')

Replace the part of the path returned by dirname. If in rename mode, also renames the referenced filesystem object.

Returns the new value of dirname

  ario = rio('dirA/dirB/afile.rb')
  ario.dirname = 'dirC'          # rio('dirC/afile.rb')
  ario.basename = 'bfile'        # rio('dirC/bfile.rb')
  ario.extname = '.txt'          # rio('dirC/bfile.txt')
  ario.filename = 'cfile.rb'     # rio('dirC/cfile.rb')

  rio('adir/afile.txt').rename.filename = 'bfile.rb' # adir/afile.txt => adir/bfile.rb
  rio('adir/afile.txt').rename.basename = 'bfile'    # adir/afile.txt => adir/bfile.txt
  rio('adir/afile.txt').rename.extname  = '.rb'      # adir/afile.txt => adir/afile.rb
  rio('adir/afile.txt').rename.dirname =  'b/c'      # adir/afile.txt => b/c/afile.txt

See dirname, rename

Calls File#expand_path

Converts a pathname to an absolute pathname. Relative paths are referenced from the current working directory of the process unless dir_string is given, in which case it will be used as the starting point. The given pathname may start with a ``~’’, which expands to the process owner’s home directory (the environment variable HOME must be set correctly). ``~user’’ expands to the named user’s home directory.

Returns a Rio representing the returned path

Sets the string that the Rio considers an extension. The value will be used by subsequent calls to basename. If called with no arguments resets its value to the value returned by File#extname. Returns the Rio.

 ario = rio('afile.tar.gz')
 ario.ext?                        #=> '.gz'
 ario.basename                    #=> rio('afile.tar')
 ario.ext('.tar.gz').basename     #=> rio('afile')
 ario.ext?                        #=> '.tar.gz'

 ario = rio('afile.txt')
 ario.ext('.txt').basename        #=> rio('afile')
 ario.ext('.zip').basename        #=> rio('afile.txt')
 ario.ext.basename                #=> rio('afile')
 ario.ext('').basename            #=> rio('afile.txt')

See also ext?,noext,basename,

Returns the value of the Rio’s ‘ext’ variable This defaults to the value returned by extname and may be set by either calling ext or by passing an argument basename See also basename, ext, extname, noext

 ario = rio('afile.txt')
 ario.ext?                        #=> '.txt'
 ario.ext('.txt').basename        #=> rio('afile')
 ario.ext?                        #=> '.txt'
 ario.ext('.zip').basename        #=> rio('afile.txt')
 ario.ext?                        #=> '.zip'
 ario.basename('.tar')            #=> rio('afile.txt')
 ario.ext?                        #=> '.tar'
 ario.ext.basename                #=> rio('afile')
 ario.ext?                        #=> '.txt'
 ario.noext.basename              #=> rio('afile.txt')
 ario.ext?                        #=> ''

Calls File#extname

Returns a String containing the path’s extension

   rio('/tmp/zippy.txt').extname   #=> '.txt'

Replace the part of the path returned by extname. If in rename mode, also renames the referenced filesystem object.

Returns the extension

  ario = rio('dirA/dirB/afile.rb')
  ario.extname = '.txt'          # rio('dirC/bfile.txt')

  rio('adir/afile.txt').rename.extname  = '.rb'      # adir/afile.txt => adir/afile.rb

See aslo extname, rename

Returns a new Rio with all path information stripped away. This is similar to basename, except that it always includes an extension if one exists

 rio('apath/afile.txt').filename #=> rio('afile.txt')

Replace the part of the path returned by filename. If in rename mode, also renames the referenced filesystem object.

Returns the new value of filename

  ario = rio('dirA/dirB/afile.rb')
  ario.dirname = 'dirC'          # rio('dirC/afile.rb')
  ario.basename = 'bfile'        # rio('dirC/bfile.rb')
  ario.extname = '.txt'          # rio('dirC/bfile.txt')
  ario.filename = 'cfile.rb'     # rio('dirC/cfile.rb')

  rio('adir/afile.txt').rename.filename = 'bfile.rb' # adir/afile.txt => adir/bfile.rb
  rio('adir/afile.txt').rename.basename = 'bfile'    # adir/afile.txt => adir/bfile.txt
  rio('adir/afile.txt').rename.extname  = '.rb'      # adir/afile.txt => adir/afile.rb
  rio('adir/afile.txt').rename.dirname =  'b/c'      # adir/afile.txt => b/c/afile.txt

See filename, rename

Returns the path for the Rio on the underlying file system Returns nil if the Rio is not on the filesystem (i.e. stdin: or http: Rios)

Calls URI#host for Rios which have a URI. Otherwise raises NoMethodError.

 rio('http://ruby-doc.org/').host #=> 'ruby-doc'

Creates new Rio by adding args as additional directory components like File#join.

  ario = rio('adir')
  brio = rio('b')
  crio = ario.join(brio)    #=> rio('adir/b')

  ario = rio('adir')
  ario.join('b','c','d')    #=> rio('ario/b/c/d')

See also /

Changes a Rio inplace by adding args as additional directory components like join,

Calls URI#merge

Merges two Rios. URI#merge does not document exactly what merging two URIs means. This appears to join the paths like other + path. See URI#merge for less information.

Identical to ext(’’)

 ario.basename                  #=> rio('afile')
 ario.noext.basename            #=> rio('afile.txt')

See also ext

Calls URI#opaque for Rios which have URI representations. The opaque portion of a URI is the portion after the colon and before the question-mark beginning the query.

 rio('http://example.org/do.cgi?n=1').opaque  #=> '//example.org/do.cgi'

For Rios that do not have URL representations, returns the same part of Rio’s internal psuedo-URL

Returns the path for the Rio, which is defined differently for different types of Rios.

For Rios representing paths on the underlying file system this is an alias fspath. For Rios with paths that are not on the file system this is an alias for urlpath.

Otherwise this returns nil.

Calls Pathname#realpath

Returns a new Rio whose path is the real (absolute) pathname of self in the actual filesystem. The real pathname doesn’t contain symlinks or useless dots.

Returns a new rio with a path equal to the relative path from other

 rio('/tmp/afile').rel('/tmp')   #=> rio('afile')
 rio('zippy/afile').rel('zippy') #=> rio('afile')

Calls URI#route_from

Returns a new rio representing the path to this Rio from the perspective of other. URI#route_from requires that absolute URIs be used. route_from does not.

Calls URI#route_to

Returns a new rio representing the path to other from the perspective of this Rio. URI#route_to requires that absolute URIs be used. route_to does not.

Returns the scheme for the Rio’s URI-like URI#scheme where the Rio is represented by a standard URI. For Rios that are not represented by standard URIs one of Rio’s non-standard schemes is returned.

 rio('http://ruby-doc.org/').scheme #=> 'http'

Returns an array of Rios, one for each path element. (Note that this behavior differs from File#split.)

 rio('a/b/c').split   #=> [rio('a'),rio('b'),rio('c')]

The array returned is extended with a to_rio method, which will put the parts back together again.

 ary = rio('a/b/c').split   #=> [rio('a'),rio('b'),rio('c')]
 ary.to_rio           #=> rio('a/b/c')

 ary = rio('a/b/c').split   #=> [rio('a'),rio('b'),rio('c')]
 ary[1] = rio('d')
 ary.to_rio           #=> rio('a/d/c')

See also join, /

For resources that have a URL (RFC1738) representation, this returns a URI object referencing it. Otherwise this raises NoMethodError.

 rio('http://rubyforge.org/').to_uri     #=> <URI::HTTP:0x818bd84 URL:http://rubyforge.org/>
 rio('adir/afile').to_uri                #=> <URI::Generic:0x817d288 URL:adir/afile>

For resources that have a absolute URL (RFC1738) representation, this returns a string containing that representation. For objects that do not this returns a RIORL (a descriptive pseudo-URL).

 rio('/var/www/')                  #=> "file:///var/www/"
 rio('http://rio.rubyforge.org/')  #=> "http://rio.rubyforge.org"

Returns the path portion of the URL representation of the rio Returns nil if the Rio URL has no path (i.e. stdin: or http: Rios)

Copyright © 2005,2006,2007 Christopher Kleckner. All rights reserved.