file-visitor 0.1.0 → 0.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 +7 -0
- data/.gitignore +10 -0
- data/.rspec +1 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +8 -9
- data/Gemfile.lock +32 -23
- data/README.md +167 -0
- data/Rakefile +3 -46
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/file-visitor.gemspec +25 -0
- data/lib/file/visitor/version.rb +5 -0
- metadata +73 -104
- data/README.rdoc +0 -19
- data/VERSION +0 -1
- data/spec/integration/use_case_spec.rb +0 -62
- data/spec/lib/file/vistor/filter/ext_spec.rb +0 -23
- data/spec/lib/file/vistor/filter/mtime_spec.rb +0 -116
- data/spec/lib/file/vistor/filter/name_spec.rb +0 -40
- data/spec/lib/file/vistor/filter/proc_spec.rb +0 -36
- data/spec/lib/file/vistor/filter_dispatcher_spec.rb +0 -26
- data/spec/lib/file/vistor/filter_spec.rb +0 -12
- data/spec/lib/file/vistor/time_utils_spec.rb +0 -156
- data/spec/lib/file/vistor_spec.rb +0 -197
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -23
- data/spec/spec_utils.rb +0 -33
@@ -1,197 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'file/visitor'
|
3
|
-
require 'spec_utils'
|
4
|
-
|
5
|
-
describe File::Visitor do
|
6
|
-
include SpecUtils
|
7
|
-
|
8
|
-
before(:each) do
|
9
|
-
setup_test_dir
|
10
|
-
@visitor = File::Visitor.new
|
11
|
-
end
|
12
|
-
|
13
|
-
after(:all) do
|
14
|
-
clear_test_dir
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'can be created with new()' do
|
18
|
-
visitor = File::Visitor.new
|
19
|
-
visitor.should be_a File::Visitor
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'file/directory traversal' do
|
23
|
-
|
24
|
-
it 'raises error on non-dir argument' do
|
25
|
-
expect { @visitor.visit(nil) }.to raise_error(ArgumentError)
|
26
|
-
expect { @visitor.visit(1) }.to raise_error(ArgumentError)
|
27
|
-
expect { @visitor.visit_dir(nil) }.to raise_error(ArgumentError)
|
28
|
-
expect { @visitor.visit_dir(1) }.to raise_error(ArgumentError)
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'can visit given directory' do
|
32
|
-
create_file(['dir1'], 'file1', 'a')
|
33
|
-
create_file(['dir1'], 'file2', 'b')
|
34
|
-
create_file(['dir1'], 'file3', 'c')
|
35
|
-
|
36
|
-
files = []
|
37
|
-
@visitor.visit(test_dir) do |path|
|
38
|
-
files.push File.basename(path)
|
39
|
-
end
|
40
|
-
|
41
|
-
files.size.should == 3
|
42
|
-
files[0].should == "file1"
|
43
|
-
files[1].should == "file2"
|
44
|
-
files[2].should == "file3"
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'can visit sibling directories' do
|
48
|
-
create_file(['dir1'], 'file10', 'a')
|
49
|
-
create_file(['dir2'], 'file11', 'b')
|
50
|
-
create_file(['dir3'], 'file12', 'c')
|
51
|
-
|
52
|
-
files = []
|
53
|
-
@visitor.visit(test_dir) do |path|
|
54
|
-
files.push File.basename(path)
|
55
|
-
end
|
56
|
-
|
57
|
-
files.size.should == 3
|
58
|
-
files[0].should == "file10"
|
59
|
-
files[1].should == "file11"
|
60
|
-
files[2].should == "file12"
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'can visit deep directories' do
|
64
|
-
create_file(['sub'], 'file20', 'a')
|
65
|
-
create_file(['sub', 'subsub'], 'file21', 'b')
|
66
|
-
create_file(['sub', 'subsub', 'subsubsub'], 'file22', 'c')
|
67
|
-
|
68
|
-
files = []
|
69
|
-
@visitor.visit(test_dir) do |path|
|
70
|
-
files.push File.basename(path)
|
71
|
-
end
|
72
|
-
|
73
|
-
files.size.should == 3
|
74
|
-
files[0].should == "file20"
|
75
|
-
files[1].should == "file21"
|
76
|
-
files[2].should == "file22"
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'return empty array when no target files' do
|
80
|
-
files = []
|
81
|
-
@visitor.visit(test_dir) do |path|
|
82
|
-
files.push File.basename(path)
|
83
|
-
end
|
84
|
-
files.should be_empty
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'can do dir-only traversal' do
|
88
|
-
create_file(['dir1'], 'file', 'a')
|
89
|
-
create_file(['dir2-1'], 'file', 'a')
|
90
|
-
create_file(['dir2-1', 'dir2-2'], 'file', 'a')
|
91
|
-
|
92
|
-
dirs = []
|
93
|
-
@visitor.visit_dir(test_dir) do |path|
|
94
|
-
File.directory?(path).should be_true
|
95
|
-
dirs.push File.basename(path)
|
96
|
-
end
|
97
|
-
|
98
|
-
dirs.size.should == 3
|
99
|
-
dirs[0].should == "dir1"
|
100
|
-
dirs[1].should == "dir2-1"
|
101
|
-
dirs[2].should == "dir2-2"
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'it can get files list' do
|
107
|
-
create_file(['dir1'], 'file1', 'a')
|
108
|
-
create_file(['dir2'], 'file2', 'b')
|
109
|
-
create_file(['dir2'], 'file3', 'c')
|
110
|
-
|
111
|
-
files = @visitor.file_list(test_dir)
|
112
|
-
files.size.should == 3
|
113
|
-
|
114
|
-
File.exist?(files[0]).should be_true
|
115
|
-
File.exist?(files[1]).should be_true
|
116
|
-
File.exist?(files[2]).should be_true
|
117
|
-
|
118
|
-
File.basename(files[0]).should == "file1"
|
119
|
-
File.basename(files[1]).should == "file2"
|
120
|
-
File.basename(files[2]).should == "file3"
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'can get dir list' do
|
124
|
-
create_file(['dir1'], 'file1', 'a')
|
125
|
-
create_file(['dir2'], 'file2', 'b')
|
126
|
-
create_file(['dir2'], 'file3', 'c')
|
127
|
-
|
128
|
-
dirs = @visitor.dir_list(test_dir)
|
129
|
-
dirs.size.should == 2
|
130
|
-
|
131
|
-
File.directory?(dirs[0]).should be_true
|
132
|
-
File.directory?(dirs[1]).should be_true
|
133
|
-
|
134
|
-
File.basename(dirs[0]).should == "dir1"
|
135
|
-
File.basename(dirs[1]).should == "dir2"
|
136
|
-
end
|
137
|
-
|
138
|
-
context "filters registration" do
|
139
|
-
|
140
|
-
before(:each) do
|
141
|
-
end
|
142
|
-
|
143
|
-
it 'built-in filter' do
|
144
|
-
@visitor.add_filter(:name, '2013-01-01.log')
|
145
|
-
@visitor.filters.size.should == 1
|
146
|
-
@visitor.filters[0].should be_a File::Visitor::Filter::Name
|
147
|
-
end
|
148
|
-
|
149
|
-
it 'custom filter' do
|
150
|
-
class ValidCustomFilter
|
151
|
-
def match?
|
152
|
-
true
|
153
|
-
end
|
154
|
-
end
|
155
|
-
@visitor.add_filter(ValidCustomFilter.new)
|
156
|
-
@visitor.filters.size.should == 1
|
157
|
-
@visitor.filters[0].should be_a ValidCustomFilter
|
158
|
-
end
|
159
|
-
|
160
|
-
it "add custom filter fails on invalid class" do
|
161
|
-
class BrokenCustomFilter
|
162
|
-
# match? not implemented
|
163
|
-
end
|
164
|
-
expect {
|
165
|
-
@visitor.add_filter(BrokenCustomFilter.new)
|
166
|
-
}.to raise_error(ArgumentError, /must implement match\?\(\)/)
|
167
|
-
end
|
168
|
-
|
169
|
-
it 'block filter' do
|
170
|
-
@visitor.add_filter do |path|
|
171
|
-
path =~ /\./
|
172
|
-
end
|
173
|
-
@visitor.filters.size.should == 1
|
174
|
-
@visitor.filters[0].should be_a File::Visitor::Filter::Proc
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
|
-
describe "target?" do
|
180
|
-
|
181
|
-
it "all the paths are target, when no filters" do
|
182
|
-
@visitor.target?("/tmp").should be_true
|
183
|
-
end
|
184
|
-
|
185
|
-
it "filter AND combination" do
|
186
|
-
@visitor.add_filter(:ext, :txt)
|
187
|
-
@visitor.add_filter { |path| path =~ /feb/ }
|
188
|
-
|
189
|
-
@visitor.target?("/tmp/2013-jan.txt").should be_false
|
190
|
-
@visitor.target?("/tmp/2013-feb.txt").should be_true
|
191
|
-
@visitor.target?("/tmp/2013-mar.txt").should be_false
|
192
|
-
end
|
193
|
-
|
194
|
-
end
|
195
|
-
|
196
|
-
end
|
197
|
-
|
data/spec/spec.opts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--colour
|
data/spec/spec_helper.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
|
2
|
-
def spec_data_dir
|
3
|
-
data_dir = File.join(
|
4
|
-
File.dirname(__FILE__), "data_for_spec")
|
5
|
-
unless File.directory?(data_dir)
|
6
|
-
FileUtils.mkdir(data_dir)
|
7
|
-
end
|
8
|
-
data_dir
|
9
|
-
end
|
10
|
-
|
11
|
-
def cleanup_spec_data_dir
|
12
|
-
return unless File.directory?(spec_data_dir)
|
13
|
-
FileUtils.rm_rf(spec_data_dir)
|
14
|
-
end
|
15
|
-
|
16
|
-
def spec_data_create(filename)
|
17
|
-
path = File.join(spec_data_dir, filename)
|
18
|
-
file = File.open(path, "w") do |file|
|
19
|
-
file.puts "test"
|
20
|
-
end
|
21
|
-
path
|
22
|
-
end
|
23
|
-
|
data/spec/spec_utils.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'fileutils'
|
3
|
-
|
4
|
-
module SpecUtils
|
5
|
-
|
6
|
-
def test_dir
|
7
|
-
File.join(File.dirname(__FILE__), 'data_for_test')
|
8
|
-
end
|
9
|
-
|
10
|
-
def clear_test_dir
|
11
|
-
FileUtils.rm_rf(test_dir)
|
12
|
-
end
|
13
|
-
|
14
|
-
def setup_test_dir
|
15
|
-
clear_test_dir
|
16
|
-
FileUtils.mkdir_p(test_dir)
|
17
|
-
end
|
18
|
-
|
19
|
-
def create_dir(dirs)
|
20
|
-
dirs.unshift test_dir
|
21
|
-
FileUtils.mkdir_p(File.join(dirs))
|
22
|
-
end
|
23
|
-
|
24
|
-
def create_file(dirs, filename, content)
|
25
|
-
dir = create_dir(dirs)
|
26
|
-
path = File.join(dir, filename)
|
27
|
-
File.open(path, 'w') do |file|
|
28
|
-
file.puts content
|
29
|
-
end
|
30
|
-
path
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|