fedux_org-stdlib 0.8.11 → 0.9.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +8 -8
- data/lib/fedux_org_stdlib/recursive_file_finder.rb +72 -0
- data/lib/fedux_org_stdlib/version.rb +1 -1
- data/spec/recursive_file_finder_spec.rb +43 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8ea2539aca02e286fba494301df890c97c51997
|
4
|
+
data.tar.gz: 50ce0223035ded9a8df1874530ecd5efe02f7dff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 673fab131735338339eca8e7aa2378b9e2db1fd8151ea2ebcc7dcebdadc6ba79649e6a8f1d29fe4cfb57a71ed10fae34db032b5de5dc0f640512707c0d854872
|
7
|
+
data.tar.gz: d7a0e36de2ec5c42ab178a7be419d8bea7494a339a7985ac4f4c5c40113ad6178f4c6d5d3317a1d5c5b9981956e538abec45a2c8ee56ddbe85e9534ebe0d4050
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fedux_org-stdlib (0.8.
|
4
|
+
fedux_org-stdlib (0.8.11)
|
5
5
|
activesupport
|
6
6
|
|
7
7
|
PATH
|
@@ -60,7 +60,7 @@ GEM
|
|
60
60
|
erubis (2.7.0)
|
61
61
|
facter (2.2.0)
|
62
62
|
CFPropertyList (~> 2.2.6)
|
63
|
-
ffi (1.9.
|
63
|
+
ffi (1.9.6)
|
64
64
|
filegen (0.4.3)
|
65
65
|
activesupport
|
66
66
|
fuubar (2.0.0)
|
@@ -78,12 +78,12 @@ GEM
|
|
78
78
|
mail (2.6.1)
|
79
79
|
mime-types (>= 1.16, < 3)
|
80
80
|
method_source (0.8.2)
|
81
|
-
mime-types (2.4.
|
81
|
+
mime-types (2.4.3)
|
82
82
|
minitest (5.4.2)
|
83
83
|
multi_json (1.10.1)
|
84
84
|
multi_test (0.1.1)
|
85
|
-
netrc (0.
|
86
|
-
parser (2.2.0.pre.
|
85
|
+
netrc (0.8.0)
|
86
|
+
parser (2.2.0.pre.6)
|
87
87
|
ast (>= 1.1, < 3.0)
|
88
88
|
slop (~> 3.4, >= 3.4.5)
|
89
89
|
posix-spawn (0.3.9)
|
@@ -100,7 +100,7 @@ GEM
|
|
100
100
|
yard (~> 0.8)
|
101
101
|
rainbow (2.0.0)
|
102
102
|
rake (10.3.2)
|
103
|
-
redcarpet (3.
|
103
|
+
redcarpet (3.2.0)
|
104
104
|
rest-client (1.7.2)
|
105
105
|
mime-types (>= 1.16, < 3.0)
|
106
106
|
netrc (~> 0.7)
|
@@ -108,7 +108,7 @@ GEM
|
|
108
108
|
rspec-core (~> 3.1.0)
|
109
109
|
rspec-expectations (~> 3.1.0)
|
110
110
|
rspec-mocks (~> 3.1.0)
|
111
|
-
rspec-core (3.1.
|
111
|
+
rspec-core (3.1.7)
|
112
112
|
rspec-support (~> 3.1.0)
|
113
113
|
rspec-expectations (3.1.2)
|
114
114
|
diff-lcs (>= 1.2.0, < 2.0)
|
@@ -150,7 +150,7 @@ GEM
|
|
150
150
|
versionomy (0.4.4)
|
151
151
|
blockenspiel (>= 0.4.5)
|
152
152
|
xml-simple (1.1.4)
|
153
|
-
yard (0.8.7.
|
153
|
+
yard (0.8.7.6)
|
154
154
|
|
155
155
|
PLATFORMS
|
156
156
|
ruby
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'fedux_org_stdlib/require_files'
|
3
|
+
require 'fedux_org_stdlib/logging/logger'
|
4
|
+
|
5
|
+
require_library %w(pathname)
|
6
|
+
|
7
|
+
module FeduxOrgStdlib
|
8
|
+
class RecursiveFileFinder
|
9
|
+
# Create a new instance of finder
|
10
|
+
#
|
11
|
+
# It tries to find a file.
|
12
|
+
#
|
13
|
+
# @param [String] file_name
|
14
|
+
# The name of the file to be looked for
|
15
|
+
#
|
16
|
+
# @param [String] working_directory
|
17
|
+
# The directory where to start search
|
18
|
+
#
|
19
|
+
# @return [RecursiveFileFinder]
|
20
|
+
# The config instance. If the resulting data structure created by the
|
21
|
+
# config_engine does not respond to `:[]` an empty config object will be
|
22
|
+
# created.
|
23
|
+
|
24
|
+
attr_reader :working_directory, :logger, :file_name, :raise_error
|
25
|
+
|
26
|
+
def initialize(
|
27
|
+
file_name:,
|
28
|
+
working_directory: Dir.getwd,
|
29
|
+
logger: FeduxOrgStdlib::Logging::Logger.new,
|
30
|
+
raise_error: true
|
31
|
+
)
|
32
|
+
@logger = logger
|
33
|
+
@working_directory = Pathname.new(working_directory).expand_path
|
34
|
+
@file_name = Pathname.new(file_name)
|
35
|
+
@raise_error = raise_error
|
36
|
+
end
|
37
|
+
|
38
|
+
# Return path to file
|
39
|
+
#
|
40
|
+
# @raise [Errno::ENOENT]
|
41
|
+
# If file cannot be found
|
42
|
+
#
|
43
|
+
# @return [Pathname]
|
44
|
+
# The path
|
45
|
+
def file
|
46
|
+
return @found_path if @found_path
|
47
|
+
|
48
|
+
@found_path = nil
|
49
|
+
|
50
|
+
working_directory.ascend do |p|
|
51
|
+
path = p + file_name
|
52
|
+
@found_path = path if path.exist?
|
53
|
+
end
|
54
|
+
|
55
|
+
return @found_path if @found_path
|
56
|
+
fail Errno::ENOENT, file_name.to_s if raise_error
|
57
|
+
|
58
|
+
nil
|
59
|
+
end
|
60
|
+
|
61
|
+
# The directory where file was found
|
62
|
+
#
|
63
|
+
# @raise [Errno::ENOENT]
|
64
|
+
# If file cannot be found
|
65
|
+
#
|
66
|
+
# @return [Pathname]
|
67
|
+
# The path to directory
|
68
|
+
def directory
|
69
|
+
file.dirname
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'fedux_org_stdlib/recursive_file_finder'
|
4
|
+
|
5
|
+
RSpec.describe RecursiveFileFinder do
|
6
|
+
context '#file' do
|
7
|
+
it 'returns path to found file' do
|
8
|
+
touch_file 'test.txt'
|
9
|
+
finder = RecursiveFileFinder.new(file_name: 'test.txt', working_directory: absolute_path('.'))
|
10
|
+
expect(finder.file).to eq Pathname.new(absolute_path('test.txt'))
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'runs up file hierarchy' do
|
14
|
+
touch_file 'test.txt'
|
15
|
+
finder = RecursiveFileFinder.new(file_name: 'test.txt', working_directory: absolute_path('dir1/dir2/'))
|
16
|
+
expect(finder.file).to eq Pathname.new(absolute_path('test.txt'))
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'runs up file hierarchy and finds it in between' do
|
20
|
+
touch_file 'dir1/test.txt'
|
21
|
+
finder = RecursiveFileFinder.new(file_name: 'test.txt', working_directory: absolute_path('dir1/dir2/'))
|
22
|
+
expect(finder.file).to eq Pathname.new(absolute_path('dir1/test.txt'))
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'fails if file was not found' do
|
26
|
+
finder = RecursiveFileFinder.new(file_name: 'test.txt', working_directory: absolute_path('dir1/dir2/'))
|
27
|
+
expect { finder.file }.to raise_error Errno::ENOENT
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns nil if told to to so' do
|
31
|
+
finder = RecursiveFileFinder.new(file_name: 'test.txt', working_directory: absolute_path('dir1/dir2/'), raise_error: false)
|
32
|
+
expect(finder.file).to be nil
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context '#directory' do
|
37
|
+
it 'returns the directory where the file was found' do
|
38
|
+
touch_file 'test.txt'
|
39
|
+
finder = RecursiveFileFinder.new(file_name: 'test.txt', working_directory: absolute_path('dir1/dir2/'))
|
40
|
+
expect(finder.directory).to eq Pathname.new(absolute_path('.'))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fedux_org-stdlib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Meyer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -146,6 +146,7 @@ files:
|
|
146
146
|
- lib/fedux_org_stdlib/rake_tasks/tests/cucumber.rb
|
147
147
|
- lib/fedux_org_stdlib/rake_tasks/tests/rspec.rb
|
148
148
|
- lib/fedux_org_stdlib/rake_tasks/tests/travis.rb
|
149
|
+
- lib/fedux_org_stdlib/recursive_file_finder.rb
|
149
150
|
- lib/fedux_org_stdlib/require_files.rb
|
150
151
|
- lib/fedux_org_stdlib/roles/comparable_by_name.rb
|
151
152
|
- lib/fedux_org_stdlib/roles/typable.rb
|
@@ -206,6 +207,7 @@ files:
|
|
206
207
|
- spec/project/plan_spec.rb
|
207
208
|
- spec/project/report_spec.rb
|
208
209
|
- spec/project/taskjuggler_spec.rb
|
210
|
+
- spec/recursive_file_finder_spec.rb
|
209
211
|
- spec/roles/typable_spec.rb
|
210
212
|
- spec/shell_language_detector_spec.rb
|
211
213
|
- spec/spec_helper.rb
|
@@ -287,6 +289,7 @@ test_files:
|
|
287
289
|
- spec/project/plan_spec.rb
|
288
290
|
- spec/project/report_spec.rb
|
289
291
|
- spec/project/taskjuggler_spec.rb
|
292
|
+
- spec/recursive_file_finder_spec.rb
|
290
293
|
- spec/roles/typable_spec.rb
|
291
294
|
- spec/shell_language_detector_spec.rb
|
292
295
|
- spec/spec_helper.rb
|