Class Hike::Trail
In: lib/hike/trail.rb
Parent: Object

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

Methods

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

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.

Public Instance methods

Alias `new_extension` to `old_extension`

append_extension(*extensions)

Alias for append_extensions

Append `extension` to `Extensions` collection

append_path(*paths)

Alias for append_paths

Append `path` to `Paths` collection

`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`.

`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

`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"
prepend_extension(*extensions)

Alias for prepend_extensions

Prepend `extension` to `Extensions` collection

prepend_path(*paths)

Alias for prepend_paths

Prepend `path` to `Paths` collection

Remove `extension` from `Extensions` collection

Remove `path` from `Paths` collection

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

`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`.

Remove the alias for `extension`

[Validate]