Class Pathname
In: lib/facets/standard/facets/pathname.rb
Parent: Object

Methods

/   []   empty?   glob   glob_first   glob_flags   glob_relative   home   include?   null   outofdate?   root   rootname   split_root   uptodate?   visit   work  

External Aliases

to_s -> to_str
  Alias to_s to to_str when to_str is not defined.
+ -> /
  Try to get this into standard Pathname class.

Public Class methods

Start a path. Another alias for new.

  Pathname / 'usr'

[Source]

# File lib/facets/standard/facets/pathname.rb, line 45
  def self./(path)
    new(path)
  end

Alternate to Pathname#new.

  Pathname['/usr/share']

[Source]

# File lib/facets/standard/facets/pathname.rb, line 37
  def self.[](path)
    new(path)
  end

Home constant for building paths from root directory onward.

TODO: Pathname#home needs to be more robust.

[Source]

# File lib/facets/standard/facets/pathname.rb, line 58
  def self.home
    Pathname.new('~')
  end

Platform dependent null device.

CREDIT Daniel Burger

[Source]

# File lib/facets/standard/facets/pathname.rb, line 71
  def self.null
    case RUBY_PLATFORM
    when /mswin/i
      'NUL'
    when /amiga/i
      'NIL:'
    when /openvms/i
      'NL:'
    else
      '/dev/null'
    end
  end

Root constant for building paths from root directory onward.

[Source]

# File lib/facets/standard/facets/pathname.rb, line 50
  def self.root
    Pathname.new('/')
  end

Work constant for building paths from root directory onward.

[Source]

# File lib/facets/standard/facets/pathname.rb, line 64
  def self.work
    Pathname.new('.')
  end

Public Instance methods

[Source]

# File lib/facets/standard/facets/pathname.rb, line 140
  def empty?
    Dir.glob(::File.join(to_s, '*')).empty?
  end

Glob pathnames.

[Source]

# File lib/facets/standard/facets/pathname.rb, line 99
  def glob(match, *opts)
    flags = glob_flags(opts)
    Dir.glob(::File.join(self.to_s, match), flags).collect{ |m| self.class.new(m) }
  end

Return the first glob match.

DEPRECATE: While slightly faster then glob().first, not really worth it unless this can be rewritten to shortcut on first match (using fnmatch?). In wich case, is there a better name for this method?

[Source]

# File lib/facets/standard/facets/pathname.rb, line 109
  def glob_first(match, *opts)
    flags = glob_flags(opts)
    file = ::Dir.glob(::File.join(self.to_s, match), flags).first
    file ? self.class.new(file) : nil
  end

Return globbed matches with pathnames relative to the current pathname.

[Source]

# File lib/facets/standard/facets/pathname.rb, line 116
  def glob_relative(match, *opts)
    flags = glob_flags(opts)
    files = Dir.glob(::File.join(self.to_s, match), flags)
    files = files.map{ |f| f.sub(self.to_s.chomp('/') + '/', '') }
    files.collect{ |m| self.class.new(m) }
  end

Does a directory contain a matching entry? Or if the pathname is a file, same as fnmatch.

[Source]

# File lib/facets/standard/facets/pathname.rb, line 222
  def include?(pattern,*opts)
    if directory?
      glob_first(pattern,*opts)
    else
      fnmatch(pattern,*opts)
    end
  end

[Source]

# File lib/facets/standard/facets/pathname.rb, line 150
  def outofdate?(*sources)
    ::FileUtils.outofdate?(to_s, sources.flatten)
  end

[Source]

# File lib/facets/standard/facets/pathname.rb, line 88
  def rootname
    self.class.new(File.rootname(to_s))
  end

[Source]

# File lib/facets/standard/facets/pathname.rb, line 93
  def split_root
    head, tail = *::File.split_root(to_s)
    [self.class.new(head), self.class.new(tail)]
  end

[Source]

# File lib/facets/standard/facets/pathname.rb, line 145
  def uptodate?(*sources)
    ::FileUtils.uptodate?(to_s, sources.flatten)
  end

Recursively visit a directory located by its path, yielding each resource as its full matching pathname object. If called on a file, yield the file.

Example use case:

  # Locate any file but *.haml within app/**/*
  Pathname.new("app").visit do |f|
    next unless f.to_s =~ /\.haml$/
    f
  end

TODO: Use map instead of each ?

CREDIT: Jean-Denis Vauguet

[Source]

# File lib/facets/standard/facets/pathname.rb, line 173
  def visit(options = {:all => false, :hidden => false})
    if self.directory?
      children.each do |entry|
        next if entry.basename.to_s[0] == "." && !options[:hidden]
        yield(entry) unless entry.directory? && !options[:all]
        ##entry.visit(:all => options[:all]) { |sub_entry| yield sub_entry } if entry.directory?
        entry.visit(:all => options[:all], :hidden => options[:hidden]) do |sub_entry|
          yield(sub_entry)
        end if entry.directory?
      end
    else
      yield self
    end
  end

Private Instance methods

[Source]

# File lib/facets/standard/facets/pathname.rb, line 125
  def glob_flags(opts)
    flags = 0
    opts.each do |opt|
      case opt when Symbol, String
        flags += ::File.const_get("FNM_#{opt}".upcase)
      else
        flags += opt
      end
    end
    flags
  end

[Validate]