Class: Hike::Trail

### Home Classes Methods

### In Files

- lib/hike/trail.rb

### Parent

Object

### Methods

- ::new
- #alias_extension
- #append_extension
- #append_extensions
- #append_path
- #append_paths
- #entries
- #find
- #index
- #prepend_extension
- #prepend_extensions
- #prepend_path
- #prepend_paths
- #remove_extension
- #remove_path
- #root
- #stat
- #unalias_extension

### Class/Module Index

Quicksearch

- Hike
- Hike::Extensions
- Hike::Index
- Hike::NormalizedArray
- Hike::Paths
- Hike::Trail

No matching classes.

# Hike::Trail

`Trail` is the public container class for holding paths and extensions.

### Attributes

aliases[R]

`Index#aliases` is a mutable `Hash` mapping an extension to an `Array` of aliases.

    trail = Hike::Trail.new
    trail.paths.push "~/Projects/hike/site"
    trail.aliases['.htm']   = 'html'
    trail.aliases['.xhtml'] = 'html'
    trail.aliases['.php']   = 'html'

Aliases provide a fallback when the primary extension is not matched. In the example above, a lookup for "foo.html" will check for the existence of "foo.htm", "foo.xhtml", or "foo.php".

extensions[R]

`Trail#extensions` is a mutable `Extensions` collection.

    trail = Hike::Trail.new
    trail.paths.push "~/Projects/hike/lib"
    trail.extensions.push ".rb"

Extensions allow you to find files by just their name omitting their extension. Is similar to Ruby's require mechanism that allows you to require files with specifiying `foo.rb`.

paths[R]

`Trail#paths` is a mutable `Paths` collection.

    trail = Hike::Trail.new
    trail.paths.push "~/Projects/hike/lib", "~/Projects/hike/test"

The order of the paths is significant. Paths in the beginning of the collection will be checked first. In the example above, `~/Projects/hike/lib/hike.rb` would shadow the existent of `~/Projects/hike/test/hike.rb`.

### Public Class Methods

new(root = ".") click to toggle source

A Trail accepts an optional root path that defaults to your current working directory. Any relative paths added to `Trail#paths` will expanded relative to the root.

    # File lib/hike/trail.rb, line 48
    def initialize(root = ".")
      @root       = Pathname.new(root).expand_path
      @paths      = Paths.new(@root)
      @extensions = Extensions.new
      @aliases    = Hash.new { |h, k| h[k] = Extensions.new }
    end

### Public Instance Methods

alias_extension(new_extension, old_extension) click to toggle source

Alias `new_extension` to `old_extension`

    # File lib/hike/trail.rb, line 95
    def alias_extension(new_extension, old_extension)
      aliases[normalize_extension(new_extension)] = normalize_extension(old_extension)
    end

append_extension(*extensions) click to toggle source
Alias for: append_extensions
append_extensions(*extensions) click to toggle source

Append `extension` to `Extensions` collection

    # File lib/hike/trail.rb, line 84
    def append_extensions(*extensions)
      self.extensions.push(*extensions)
    end

Also aliased as: append_extension
append_path(*paths) click to toggle source
Alias for: append_paths
append_paths(*paths) click to toggle source

Append `path` to `Paths` collection

    # File lib/hike/trail.rb, line 67
    def append_paths(*paths)
      self.paths.push(*paths)
    end

Also aliased as: append_path
entries(path) click to toggle source

`Trail#entries` is equivalent to `Dir#entries`. It is not recommend to use this method for general purposes. It exists for parity with `Index#entries`.

    # File lib/hike/trail.rb, line 159
    def entries(path)
      pathname = Pathname.new(path)
      if pathname.directory?
        pathname.entries.reject { |entry| entry.to_s =~ /^\.|~$|^\#.*\#$/ }.sort
      else
        []
      end
    end

find(*args, &block) click to toggle source

`Trail#find` returns a the expand path for a logical path in the path collection.

    trail = Hike::Trail.new "~/Projects/hike"
    trail.extensions.push ".rb"
    trail.paths.push "lib", "test"

    trail.find "hike/trail"
    # => "~/Projects/hike/lib/hike/trail.rb"

    trail.find "test_trail"
    # => "~/Projects/hike/test/test_trail.rb"

`find` accepts multiple fallback logical paths that returns the first match.

    trail.find "hike", "hike/index"

is equivalent to

    trail.find("hike") || trail.find("hike/index")

Though `find` always returns the first match, it is possible to iterate over all shadowed matches and fallbacks by supplying a block.

    trail.find("hike", "hike/index") { |path| warn path }

This allows you to filter your matches by any condition.

    trail.find("application") do |path|
      return path if mime_type_for(path) == "text/css"
    end

    # File lib/hike/trail.rb, line 138
    def find(*args, &block)
      index.find(*args, &block)
    end

index() click to toggle source

`Trail#index` returns an `Index` object that has the same interface as `Trail`. An `Index` is a cached `Trail` object that does not update when the file system changes. If you are confident that you are not making changes the paths you are searching, `index` will avoid excess system calls.

    index = trail.index
    index.find "hike/trail"
    index.find "test_trail"

    # File lib/hike/trail.rb, line 152
    def index
      Index.new(root, paths, extensions, aliases)
    end

prepend_extension(*extensions) click to toggle source
Alias for: prepend_extensions
prepend_extensions(*extensions) click to toggle source

Prepend `extension` to `Extensions` collection

    # File lib/hike/trail.rb, line 78
    def prepend_extensions(*extensions)
      self.extensions.unshift(*extensions)
    end

Also aliased as: prepend_extension
prepend_path(*paths) click to toggle source
Alias for: prepend_paths
prepend_paths(*paths) click to toggle source

Prepend `path` to `Paths` collection

    # File lib/hike/trail.rb, line 61
    def prepend_paths(*paths)
      self.paths.unshift(*paths)
    end

Also aliased as: prepend_path
remove_extension(extension) click to toggle source

Remove `extension` from `Extensions` collection

    # File lib/hike/trail.rb, line 90
    def remove_extension(extension)
      self.extensions.delete(extension)
    end

remove_path(path) click to toggle source

Remove `path` from `Paths` collection

    # File lib/hike/trail.rb, line 73
    def remove_path(path)
      self.paths.delete(path)
    end

root() click to toggle source

`Trail#root` returns root path as a `String`. This attribute is immutable.

    # File lib/hike/trail.rb, line 56
    def root
      @root.to_s
    end

stat(path) click to toggle source

`Trail#stat` is equivalent to `File#stat`. It is not recommend to use this method for general purposes. It exists for parity with `Index#stat`.

    # File lib/hike/trail.rb, line 171
    def stat(path)
      if File.exist?(path)
        File.stat(path.to_s)
      else
        nil
      end
    end

unalias_extension(extension) click to toggle source

Remove the alias for `extension`

    # File lib/hike/trail.rb, line 100
    def unalias_extension(extension)
      aliases.delete(normalize_extension(extension))
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.