hike 2.1.1 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hike.rb +1 -1
  3. data/lib/hike/cached_trail.rb +19 -32
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c46019e7383a433c30d2859e3e9da31a37623562
4
- data.tar.gz: 25ec96e4f50c22d099f321c8ba11cf3a51c0d108
3
+ metadata.gz: 797933ddf4e64187ab3a4e714147a41602fcd58e
4
+ data.tar.gz: dd13bfc57bb7239db82fb1ca3d543928ab3ba94f
5
5
  SHA512:
6
- metadata.gz: d3477f9cd81a43db8f296485ac46823c86749ca698745c68bcfd0bcca0061c8a9e654fed29138460c0f5ebf19198ba1da1c2773dcdf5ad141519ceca554a1a90
7
- data.tar.gz: 0ba3c75b015858f23eee6960ab984a77e1226b0628bdcfc7f6ad5df89d2622a9f30ad27af1120063a947d42ab53f1ef8e12874ec6dffeb1d7372a23b5cc29dec
6
+ metadata.gz: 3483da81e21e40f322abe6c39d20ddb52f52ba438095431624d9186726d3eb424713f2b118fb28f65d4dc25aef894f8a046f418d62292306ab807622ff670234
7
+ data.tar.gz: 7bb837bb3856a8d1898964c3e497835ef83ebd34b528fc5c65acc10e777562ec90e300748568302dd8c2534b06a7eeede9940c1bca91cc86df9bb65d98eb5cc1
@@ -1,5 +1,5 @@
1
1
  module Hike
2
- VERSION = "2.1.1"
2
+ VERSION = "2.1.2"
3
3
 
4
4
  autoload :CachedTrail, "hike/cached_trail"
5
5
  autoload :Extensions, "hike/extensions"
@@ -25,13 +25,16 @@ module Hike
25
25
  # `@aliases` would have unpredictable results.
26
26
  @paths = paths.dup.freeze
27
27
  @extensions = extensions.dup.freeze
28
- @aliases = aliases.inject({}) { |h, (k, a)|
29
- h[k] = a.dup.freeze; h
30
- }.freeze
31
28
 
32
- @stats = {}
33
- @entries = {}
34
- @patterns = {}
29
+ # Create a reverse mapping from extension to possible aliases.
30
+ @aliases = aliases.dup.freeze
31
+ @reverse_aliases = @aliases.inject({}) { |h, (k, a)|
32
+ (h[a] ||= []) << k; h
33
+ }
34
+
35
+ @stats = Hash.new { |h, k| h[k] = FileUtils.stat(k) }
36
+ @entries = Hash.new { |h, k| h[k] = FileUtils.entries(k) }
37
+ @patterns = Hash.new { |h, k| h[k] = pattern_for(k) }
35
38
  end
36
39
 
37
40
  # `CachedTrail#root` returns root path as a `String`. This attribute is immutable.
@@ -80,18 +83,13 @@ module Hike
80
83
  # `~` swap files. Returns an empty `Array` if the directory does
81
84
  # not exist.
82
85
  def entries(path)
83
- @entries[path.to_s] ||= super
86
+ @entries[path]
84
87
  end
85
88
 
86
89
  # A cached version of `File.stat`. Returns nil if the file does
87
90
  # not exist.
88
91
  def stat(path)
89
- key = path.to_s
90
- if @stats.key?(key)
91
- @stats[key]
92
- else
93
- @stats[key] = super
94
- end
92
+ @stats[path]
95
93
  end
96
94
 
97
95
  protected
@@ -123,16 +121,16 @@ module Hike
123
121
  # any syscalls if necessary.
124
122
  def match(dirname, basename)
125
123
  # Potential `entries` syscall
126
- matches = entries(dirname)
124
+ matches = @entries[dirname]
127
125
 
128
- pattern = pattern_for(basename)
126
+ pattern = @patterns[basename]
129
127
  matches = matches.select { |m| m =~ pattern }
130
128
 
131
129
  sort_matches(matches, basename).each do |path|
132
130
  filename = File.join(dirname, path)
133
131
 
134
132
  # Potential `stat` syscall
135
- stat = stat(filename)
133
+ stat = @stats[filename]
136
134
 
137
135
  # Exclude directories
138
136
  if stat && stat.file?
@@ -146,19 +144,14 @@ module Hike
146
144
  paths.any? { |path| dirname[0, path.length] == path }
147
145
  end
148
146
 
149
- # Cache results of `build_pattern_for`
150
- def pattern_for(basename)
151
- @patterns[basename] ||= build_pattern_for(basename)
152
- end
153
-
154
147
  # Returns a `Regexp` that matches the allowed extensions.
155
148
  #
156
149
  # pattern_for("index.html") #=> /^index(.html|.htm)(.builder|.erb)*$/
157
- def build_pattern_for(basename)
150
+ def pattern_for(basename)
158
151
  extname = File.extname(basename)
159
- aliases = find_aliases_for(extname)
152
+ aliases = @reverse_aliases[extname]
160
153
 
161
- if aliases.any?
154
+ if aliases
162
155
  basename = File.basename(basename, extname)
163
156
  aliases = [extname] + aliases
164
157
  aliases_pattern = aliases.map { |e| Regexp.escape(e) }.join("|")
@@ -175,7 +168,8 @@ module Hike
175
168
  # priority. Extensions in the front of the `extensions` carry
176
169
  # more weight.
177
170
  def sort_matches(matches, basename)
178
- aliases = find_aliases_for(File.extname(basename))
171
+ extname = File.extname(basename)
172
+ aliases = @reverse_aliases[extname] || []
179
173
 
180
174
  matches.sort_by do |match|
181
175
  extnames = match.sub(basename, '').scan(/\.[^.]+/)
@@ -190,12 +184,5 @@ module Hike
190
184
  end
191
185
  end
192
186
  end
193
-
194
- def find_aliases_for(extension)
195
- @aliases.inject([]) do |aliases, (key, value)|
196
- aliases.push(key) if value == extension
197
- aliases
198
- end
199
- end
200
187
  end
201
188
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hike
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Stephenson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-19 00:00:00.000000000 Z
11
+ date: 2014-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake