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.
@@ -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
-
@@ -1 +0,0 @@
1
- --colour
@@ -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
-
@@ -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