Class: Opal::Hike::Index
- Inherits:
-
Object
- Object
- Opal::Hike::Index
- Defined in:
- opal/lib/opal/hike.rb
Overview
Index
is an internal cached variant of Trail
. It assumes the
file system does not change between find
calls. All stat
and
entries
calls are cached for the lifetime of the Index
object.
Instance Attribute Summary collapse
-
#extensions ⇒ Object
readonly
Index#extensions
is an immutable collection of extensions. -
#paths ⇒ Object
readonly
Index#paths
is an immutable collection ofPathname
s.
Instance Method Summary collapse
-
#entries(path) ⇒ Object
A cached version of
Dir.entries
that filters out.
files and~
swap files. -
#find(logical_path) ⇒ Object
The real implementation of
find
. -
#index ⇒ Object
Index#index
returnsself
to be compatable with theTrail
interface. -
#initialize(root, paths, extensions) ⇒ Index
constructor
Index.new
is an internal method. -
#root ⇒ Object
Index#root
returns root path as aString
. -
#stat(path) ⇒ Object
A cached version of
File.stat
.
Constructor Details
#initialize(root, paths, extensions) ⇒ Index
Index.new
is an internal method. Instead of constructing it
directly, create a Trail
and call Trail#index
.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'opal/lib/opal/hike.rb', line 41 def initialize(root, paths, extensions) @root = root # Freeze is used here so an error is throw if a mutator method # is called on the array. Mutating `@paths`, `@extensions` # would have unpredictable results. @paths = paths.dup.freeze @extensions = extensions.dup.freeze @pathnames = paths.map { |path| Pathname.new(path) } @stats = {} @entries = {} @patterns = {} end |
Instance Attribute Details
#extensions ⇒ Object (readonly)
Index#extensions
is an immutable collection of extensions.
37 38 39 |
# File 'opal/lib/opal/hike.rb', line 37 def extensions @extensions end |
#paths ⇒ Object (readonly)
Index#paths
is an immutable collection of Pathname
s.
34 35 36 |
# File 'opal/lib/opal/hike.rb', line 34 def paths @paths end |
Instance Method Details
#entries(path) ⇒ Object
A cached version of Dir.entries
that filters out .
files and
~
swap files. Returns an empty Array
if the directory does
not exist.
86 87 88 89 90 91 92 93 94 95 |
# File 'opal/lib/opal/hike.rb', line 86 def entries(path) @entries[path.to_s] ||= begin pathname = Pathname.new(path) if pathname.directory? pathname.entries.reject { |entry| entry.to_s =~ /^\.|~$|^\#.*\#$/ }.sort else [] end end end |
#find(logical_path) ⇒ Object
The real implementation of find
. Trail#find
generates a one
time index and delegates here.
See Trail#find
for usage.
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'opal/lib/opal/hike.rb', line 70 def find(logical_path) base_path = Pathname.new(@root) logical_path = Pathname.new(logical_path.sub(/^\//, '')) if logical_path.to_s =~ %r{^\.\.?/} find_in_base_path(logical_path, base_path) { |path| return path } else find_in_paths(logical_path) { |path| return path } end nil end |
#index ⇒ Object
Index#index
returns self
to be compatable with the Trail
interface.
62 63 64 |
# File 'opal/lib/opal/hike.rb', line 62 def index self end |
#root ⇒ Object
Index#root
returns root path as a String
. This attribute is immutable.
57 58 59 |
# File 'opal/lib/opal/hike.rb', line 57 def root @root.to_s end |
#stat(path) ⇒ Object
A cached version of File.stat
. Returns nil if the file does
not exist.
99 100 101 102 103 104 105 106 107 108 |
# File 'opal/lib/opal/hike.rb', line 99 def stat(path) key = path.to_s if @stats.key?(key) @stats[key] elsif File.exist?(path) @stats[key] = File.stat(path) else @stats[key] = nil end end |