hike 0.1.0
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.
- data/lib/hike.rb +8 -0
- data/lib/hike/extensions.rb +11 -0
- data/lib/hike/normalized_array.rb +54 -0
- data/lib/hike/paths.rb +13 -0
- data/lib/hike/trail.rb +39 -0
- metadata +72 -0
data/lib/hike.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
module Hike
|
2
|
+
class NormalizedArray < Array
|
3
|
+
def initialize
|
4
|
+
super()
|
5
|
+
end
|
6
|
+
|
7
|
+
def []=(*args)
|
8
|
+
value = args.pop
|
9
|
+
|
10
|
+
if value.respond_to?(:to_ary)
|
11
|
+
value = normalize_elements(value)
|
12
|
+
else
|
13
|
+
value = normalize_element(value)
|
14
|
+
end
|
15
|
+
|
16
|
+
super *args.concat([value])
|
17
|
+
end
|
18
|
+
|
19
|
+
def <<(element)
|
20
|
+
super normalize_element(element)
|
21
|
+
end
|
22
|
+
|
23
|
+
def collect!
|
24
|
+
super do |element|
|
25
|
+
result = yield element
|
26
|
+
normalize_element(result)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
alias_method :map!, :collect!
|
31
|
+
|
32
|
+
def insert(index, *elements)
|
33
|
+
super index, *normalize_elements(elements)
|
34
|
+
end
|
35
|
+
|
36
|
+
def push(*elements)
|
37
|
+
super *normalize_elements(elements)
|
38
|
+
end
|
39
|
+
|
40
|
+
def replace(elements)
|
41
|
+
super normalize_elements(elements)
|
42
|
+
end
|
43
|
+
|
44
|
+
def unshift(*elements)
|
45
|
+
super *normalize_elements(elements)
|
46
|
+
end
|
47
|
+
|
48
|
+
def normalize_elements(elements)
|
49
|
+
elements.map do |element|
|
50
|
+
normalize_element(element)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/hike/paths.rb
ADDED
data/lib/hike/trail.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Hike
|
2
|
+
class Trail
|
3
|
+
attr_reader :root, :paths, :extensions
|
4
|
+
|
5
|
+
def initialize(root)
|
6
|
+
@root = File.expand_path(root)
|
7
|
+
@paths = Paths.new(@root)
|
8
|
+
@extensions = Extensions.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def find(logical_path)
|
12
|
+
candidates = candidates_for(logical_path)
|
13
|
+
|
14
|
+
paths.each do |path|
|
15
|
+
candidates.each do |candidate|
|
16
|
+
filename = File.join(path, candidate)
|
17
|
+
return filename if exists?(filename)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
def candidates_for(logical_path)
|
26
|
+
candidates = extensions.map { |ext| logical_path + ext }
|
27
|
+
candidates.unshift(logical_path) if has_extension?(logical_path)
|
28
|
+
candidates
|
29
|
+
end
|
30
|
+
|
31
|
+
def has_extension?(logical_path)
|
32
|
+
extensions.include?(File.extname(logical_path))
|
33
|
+
end
|
34
|
+
|
35
|
+
def exists?(path)
|
36
|
+
File.exists?(path)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hike
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Sam Stephenson
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-10-16 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: A Ruby library for finding files in a set of paths.
|
23
|
+
email:
|
24
|
+
- sstephenson@gmail.com
|
25
|
+
executables: []
|
26
|
+
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files: []
|
30
|
+
|
31
|
+
files:
|
32
|
+
- lib/hike/extensions.rb
|
33
|
+
- lib/hike/normalized_array.rb
|
34
|
+
- lib/hike/paths.rb
|
35
|
+
- lib/hike/trail.rb
|
36
|
+
- lib/hike.rb
|
37
|
+
has_rdoc: true
|
38
|
+
homepage: http://github.com/sstephenson/hike
|
39
|
+
licenses: []
|
40
|
+
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
hash: 3
|
52
|
+
segments:
|
53
|
+
- 0
|
54
|
+
version: "0"
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
requirements: []
|
65
|
+
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 1.3.7
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: Find files in a set of paths
|
71
|
+
test_files: []
|
72
|
+
|