[フレーム]

Class: Opal::Hike::Index

Inherits:
Object
  • Object
  • Opal::Hike::Index
show all
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

Instance Method Summary collapse

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

#extensionsObject (readonly)

Index#extensions is an immutable collection of extensions.

37
38
39
# File 'opal/lib/opal/hike.rb', line 37
def extensions
 @extensions
end

#pathsObject (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

#indexObject

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

#rootObject

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

AltStyle によって変換されたページ (->オリジナル) /