hike 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/hike.rb +1 -1
- data/lib/hike/cached_trail.rb +21 -26
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c46019e7383a433c30d2859e3e9da31a37623562
|
4
|
+
data.tar.gz: 25ec96e4f50c22d099f321c8ba11cf3a51c0d108
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3477f9cd81a43db8f296485ac46823c86749ca698745c68bcfd0bcca0061c8a9e654fed29138460c0f5ebf19198ba1da1c2773dcdf5ad141519ceca554a1a90
|
7
|
+
data.tar.gz: 0ba3c75b015858f23eee6960ab984a77e1226b0628bdcfc7f6ad5df89d2622a9f30ad27af1120063a947d42ab53f1ef8e12874ec6dffeb1d7372a23b5cc29dec
|
data/lib/hike.rb
CHANGED
data/lib/hike/cached_trail.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
|
3
1
|
module Hike
|
4
2
|
# `CachedTrail` is an internal cached variant of `Trail`. It assumes the
|
5
3
|
# file system does not change between `find` calls. All `stat` and
|
@@ -20,7 +18,7 @@ module Hike
|
|
20
18
|
# `CachedTrail.new` is an internal method. Instead of constructing it
|
21
19
|
# directly, create a `Trail` and call `Trail#CachedTrail`.
|
22
20
|
def initialize(root, paths, extensions, aliases)
|
23
|
-
@root = root
|
21
|
+
@root = root.to_s
|
24
22
|
|
25
23
|
# Freeze is used here so an error is throw if a mutator method
|
26
24
|
# is called on the array. Mutating `@paths`, `@extensions`, or
|
@@ -30,7 +28,6 @@ module Hike
|
|
30
28
|
@aliases = aliases.inject({}) { |h, (k, a)|
|
31
29
|
h[k] = a.dup.freeze; h
|
32
30
|
}.freeze
|
33
|
-
@pathnames = paths.map { |path| Pathname.new(path) }
|
34
31
|
|
35
32
|
@stats = {}
|
36
33
|
@entries = {}
|
@@ -38,9 +35,7 @@ module Hike
|
|
38
35
|
end
|
39
36
|
|
40
37
|
# `CachedTrail#root` returns root path as a `String`. This attribute is immutable.
|
41
|
-
|
42
|
-
@root.to_s
|
43
|
-
end
|
38
|
+
attr_reader :root
|
44
39
|
|
45
40
|
# `CachedTrail#cached` returns `self` to be compatable with the `Trail` interface.
|
46
41
|
def cached
|
@@ -66,10 +61,10 @@ module Hike
|
|
66
61
|
return to_enum(__method__, *logical_paths) unless block_given?
|
67
62
|
|
68
63
|
options = extract_options!(logical_paths)
|
69
|
-
base_path =
|
64
|
+
base_path = (options[:base_path] || root).to_s
|
70
65
|
|
71
66
|
logical_paths.each do |logical_path|
|
72
|
-
logical_path =
|
67
|
+
logical_path = logical_path.sub(/^\//, '')
|
73
68
|
|
74
69
|
if relative?(logical_path)
|
75
70
|
find_in_base_path(logical_path, base_path, &block)
|
@@ -104,23 +99,23 @@ module Hike
|
|
104
99
|
arguments.last.is_a?(Hash) ? arguments.pop.dup : {}
|
105
100
|
end
|
106
101
|
|
107
|
-
def relative?(
|
108
|
-
|
102
|
+
def relative?(path)
|
103
|
+
path =~ /^\.\.?\//
|
109
104
|
end
|
110
105
|
|
111
106
|
# Finds logical path across all `paths`
|
112
107
|
def find_in_paths(logical_path, &block)
|
113
|
-
dirname, basename =
|
114
|
-
@
|
115
|
-
match(
|
108
|
+
dirname, basename = File.split(logical_path)
|
109
|
+
@paths.each do |base_path|
|
110
|
+
match(File.expand_path(dirname, base_path), basename, &block)
|
116
111
|
end
|
117
112
|
end
|
118
113
|
|
119
114
|
# Finds relative logical path, `../test/test_trail`. Requires a
|
120
115
|
# `base_path` for reference.
|
121
116
|
def find_in_base_path(logical_path, base_path, &block)
|
122
|
-
candidate =
|
123
|
-
dirname, basename =
|
117
|
+
candidate = File.expand_path(logical_path, base_path)
|
118
|
+
dirname, basename = File.split(candidate)
|
124
119
|
match(dirname, basename, &block) if paths_contain?(dirname)
|
125
120
|
end
|
126
121
|
|
@@ -134,21 +129,21 @@ module Hike
|
|
134
129
|
matches = matches.select { |m| m =~ pattern }
|
135
130
|
|
136
131
|
sort_matches(matches, basename).each do |path|
|
137
|
-
|
132
|
+
filename = File.join(dirname, path)
|
138
133
|
|
139
134
|
# Potential `stat` syscall
|
140
|
-
stat = stat(
|
135
|
+
stat = stat(filename)
|
141
136
|
|
142
137
|
# Exclude directories
|
143
138
|
if stat && stat.file?
|
144
|
-
yield
|
139
|
+
yield filename
|
145
140
|
end
|
146
141
|
end
|
147
142
|
end
|
148
143
|
|
149
144
|
# Returns true if `dirname` is a subdirectory of any of the `paths`
|
150
145
|
def paths_contain?(dirname)
|
151
|
-
paths.any? { |path| dirname
|
146
|
+
paths.any? { |path| dirname[0, path.length] == path }
|
152
147
|
end
|
153
148
|
|
154
149
|
# Cache results of `build_pattern_for`
|
@@ -160,16 +155,16 @@ module Hike
|
|
160
155
|
#
|
161
156
|
# pattern_for("index.html") #=> /^index(.html|.htm)(.builder|.erb)*$/
|
162
157
|
def build_pattern_for(basename)
|
163
|
-
extname =
|
158
|
+
extname = File.extname(basename)
|
164
159
|
aliases = find_aliases_for(extname)
|
165
160
|
|
166
161
|
if aliases.any?
|
167
|
-
basename =
|
162
|
+
basename = File.basename(basename, extname)
|
168
163
|
aliases = [extname] + aliases
|
169
164
|
aliases_pattern = aliases.map { |e| Regexp.escape(e) }.join("|")
|
170
|
-
basename_re = Regexp.escape(basename
|
165
|
+
basename_re = Regexp.escape(basename) + "(?:#{aliases_pattern})"
|
171
166
|
else
|
172
|
-
basename_re = Regexp.escape(basename
|
167
|
+
basename_re = Regexp.escape(basename)
|
173
168
|
end
|
174
169
|
|
175
170
|
extension_pattern = extensions.map { |e| Regexp.escape(e) }.join("|")
|
@@ -180,10 +175,10 @@ module Hike
|
|
180
175
|
# priority. Extensions in the front of the `extensions` carry
|
181
176
|
# more weight.
|
182
177
|
def sort_matches(matches, basename)
|
183
|
-
aliases = find_aliases_for(
|
178
|
+
aliases = find_aliases_for(File.extname(basename))
|
184
179
|
|
185
180
|
matches.sort_by do |match|
|
186
|
-
extnames = match.sub(basename
|
181
|
+
extnames = match.sub(basename, '').scan(/\.[^.]+/)
|
187
182
|
extnames.inject(0) do |sum, ext|
|
188
183
|
if i = extensions.index(ext)
|
189
184
|
sum + i + 1
|
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.
|
4
|
+
version: 2.1.1
|
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-
|
11
|
+
date: 2014-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|