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#extensionsis an immutable collection of extensions. -
#paths ⇒ Object
readonly
Index#pathsis an immutable collection ofPathnames.
Instance Method Summary collapse
-
#entries(path) ⇒ Object
A cached version of
Dir.entriesthat filters out.files and~swap files. -
#find(logical_path) ⇒ Object
The real implementation of
find. -
#index ⇒ Object
Index#indexreturnsselfto be compatable with theTrailinterface. -
#initialize(root, paths, extensions) ⇒ Index
constructor
Index.newis an internal method. -
#root ⇒ Object
Index#rootreturns 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 Pathnames.
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 |