file-visitor 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/README.rdoc
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
= file-visitor
|
2
|
-
|
3
|
-
Description goes here.
|
4
|
-
|
5
|
-
== Contributing to file-visitor
|
6
|
-
|
7
|
-
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
8
|
-
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
|
9
|
-
* Fork the project.
|
10
|
-
* Start a feature/bugfix branch.
|
11
|
-
* Commit and push until you are happy with your contribution.
|
12
|
-
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
13
|
-
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
14
|
-
|
15
|
-
== Copyright
|
16
|
-
|
17
|
-
Copyright (c) 2013 bonar. See LICENSE.txt for
|
18
|
-
further details.
|
19
|
-
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.1.0
|
@@ -1,62 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'file/visitor'
|
3
|
-
require 'spec_utils'
|
4
|
-
|
5
|
-
describe 'use case test' do
|
6
|
-
include SpecUtils
|
7
|
-
|
8
|
-
before(:each) do
|
9
|
-
setup_test_dir
|
10
|
-
end
|
11
|
-
|
12
|
-
context "collect log file" do
|
13
|
-
|
14
|
-
before(:each) do
|
15
|
-
@path1 = create_file(['log', '2013-01'], '2013-01-01.log', 'a')
|
16
|
-
@path2 = create_file(['log', '2013-02'], '2013-02-02.log', 'b')
|
17
|
-
@path3 = create_file(['log', '2013-02'], '2013-02-03.log', 'c')
|
18
|
-
@path4 = create_file(['log', '2013-01'], '2013-01-03.txt', 'd')
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'removes 2013-02 logs' do
|
22
|
-
visitor = File::Visitor.new
|
23
|
-
visitor.add_filter(:ext, :log)
|
24
|
-
visitor.add_filter { |path| path =~ /2013\-02/ }
|
25
|
-
|
26
|
-
FileUtils.stub!(:rm).with(@path2)
|
27
|
-
FileUtils.stub!(:rm).with(@path3)
|
28
|
-
|
29
|
-
visitor.visit(test_dir) do |path|
|
30
|
-
FileUtils.rm(path)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'removes old logs' do
|
35
|
-
time1 = Time.parse("2013-01-01 00:00:00")
|
36
|
-
time2 = Time.parse("2013-01-02 00:00:00")
|
37
|
-
time3 = Time.parse("2013-01-03 00:00:00")
|
38
|
-
time4 = Time.parse("2013-01-04 00:00:00")
|
39
|
-
|
40
|
-
File.utime(time1, time1, @path1)
|
41
|
-
File.utime(time2, time2, @path2)
|
42
|
-
File.utime(time3, time3, @path3)
|
43
|
-
File.utime(time4, time4, @path4)
|
44
|
-
|
45
|
-
Time.stub!(:now).and_return(Time.parse("2013-01-04 22:00:00"))
|
46
|
-
|
47
|
-
visitor = File::Visitor.new
|
48
|
-
visitor.add_filter(:mtime, :passed, 1, :day)
|
49
|
-
|
50
|
-
visitor.file_list(test_dir).should == [@path1, @path2, @path3]
|
51
|
-
|
52
|
-
visitor.add_filter(:mtime, :passed, 2, :days)
|
53
|
-
visitor.file_list(test_dir).should == [@path1, @path2]
|
54
|
-
|
55
|
-
visitor.add_filter(:mtime, :passed, 3, :days)
|
56
|
-
visitor.file_list(test_dir).should == [@path1]
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
|
@@ -1,23 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'file/visitor/filter/ext'
|
3
|
-
|
4
|
-
describe File::Visitor::Filter::Ext do
|
5
|
-
|
6
|
-
it 'can be created with String/Symbol' do
|
7
|
-
filter = File::Visitor::Filter::Ext.new(:txt)
|
8
|
-
filter = File::Visitor::Filter::Ext.new("txt")
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'can match filename extention' do
|
12
|
-
filter = File::Visitor::Filter::Ext.new(:txt)
|
13
|
-
filter.match?("/path/to/file.txt").should be_true
|
14
|
-
filter.match?("/path/to/file.dat").should be_false
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'can be stringified' do
|
18
|
-
filter = File::Visitor::Filter::Ext.new(:jpg)
|
19
|
-
filter.to_s.should == "File::Visitor::Filter::Ext[.jpg]"
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
|
@@ -1,116 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'file/visitor/filter/mtime'
|
3
|
-
require 'spec_helper'
|
4
|
-
require 'fileutils'
|
5
|
-
require 'time'
|
6
|
-
|
7
|
-
describe File::Visitor::Filter::Mtime do
|
8
|
-
|
9
|
-
before(:each) do
|
10
|
-
@ns = File::Visitor::Filter::Mtime
|
11
|
-
cleanup_spec_data_dir
|
12
|
-
end
|
13
|
-
|
14
|
-
after(:each) do
|
15
|
-
cleanup_spec_data_dir
|
16
|
-
end
|
17
|
-
|
18
|
-
it "can be created with comparator/target_time" do
|
19
|
-
filter = @ns.new(:equals_to, Time.now)
|
20
|
-
filter.should be_a @ns
|
21
|
-
end
|
22
|
-
|
23
|
-
context ":passed" do
|
24
|
-
|
25
|
-
it ":passed initialize" do
|
26
|
-
Time.stub!(:now).and_return(
|
27
|
-
Time.parse("2013-01-05 05:00"))
|
28
|
-
|
29
|
-
filter1 = @ns.new(:passed, 2, :days)
|
30
|
-
|
31
|
-
file1 = spec_data_create("file1")
|
32
|
-
file2 = spec_data_create("file2")
|
33
|
-
file3 = spec_data_create("file3")
|
34
|
-
file4 = spec_data_create("file4")
|
35
|
-
|
36
|
-
time1 = Time.parse("2013-01-03 04:59")
|
37
|
-
time2 = Time.parse("2013-01-03 05:00")
|
38
|
-
time3 = Time.parse("2013-01-03 05:01")
|
39
|
-
time4 = Time.parse("2013-01-04 05:00")
|
40
|
-
|
41
|
-
File.utime(time1, time1, file1)
|
42
|
-
File.utime(time2, time2, file2)
|
43
|
-
File.utime(time3, time3, file3)
|
44
|
-
File.utime(time4, time4, file4)
|
45
|
-
|
46
|
-
filter1.match?(file1).should be_true
|
47
|
-
filter1.match?(file2).should be_false
|
48
|
-
filter1.match?(file3).should be_false
|
49
|
-
filter1.match?(file4).should be_false
|
50
|
-
|
51
|
-
filter2 = @ns.new(:passed=, 2, :days)
|
52
|
-
filter2.match?(file1).should be_true
|
53
|
-
filter2.match?(file2).should be_true
|
54
|
-
filter2.match?(file3).should be_false
|
55
|
-
filter2.match?(file4).should be_false
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
it "raises error with invalid comparator" do
|
61
|
-
expect { @ns.new(:invalid, Time.now) }.to \
|
62
|
-
raise_error(ArgumentError, %r/comparator must/)
|
63
|
-
end
|
64
|
-
|
65
|
-
it "raises error with non-Time instance" do
|
66
|
-
expect { @ns.new(:equals_to, :now) }.to \
|
67
|
-
raise_error(ArgumentError, %r/time must be/)
|
68
|
-
end
|
69
|
-
|
70
|
-
context "match?" do
|
71
|
-
|
72
|
-
before(:each) do
|
73
|
-
@file1 = spec_data_create("file1")
|
74
|
-
@file2 = spec_data_create("file2")
|
75
|
-
@file3 = spec_data_create("file3")
|
76
|
-
@file4 = spec_data_create("file4")
|
77
|
-
|
78
|
-
@time1 = Time.parse("2013-01-05 00:00")
|
79
|
-
@time2 = Time.parse("2013-01-06 00:00")
|
80
|
-
@time3 = Time.parse("2013-01-07 00:00")
|
81
|
-
@time4 = Time.parse("2013-01-08 00:00")
|
82
|
-
|
83
|
-
File.utime(@time1, @time1, @file1)
|
84
|
-
File.utime(@time2, @time2, @file2)
|
85
|
-
File.utime(@time3, @time3, @file3)
|
86
|
-
File.utime(@time4, @time4, @file4)
|
87
|
-
end
|
88
|
-
|
89
|
-
it "supports eq filter" do
|
90
|
-
filter = @ns.new(:equals_to, @time2)
|
91
|
-
filter.match?(@file1).should be_false
|
92
|
-
filter.match?(@file2).should be_true
|
93
|
-
filter.match?(@file3).should be_false
|
94
|
-
filter.match?(@file4).should be_false
|
95
|
-
end
|
96
|
-
|
97
|
-
it "supports lt filter" do
|
98
|
-
filter = @ns.new(:is_less_than, @time2)
|
99
|
-
filter.match?(@file1).should be_true
|
100
|
-
filter.match?(@file2).should be_false
|
101
|
-
filter.match?(@file3).should be_false
|
102
|
-
filter.match?(@file4).should be_false
|
103
|
-
end
|
104
|
-
|
105
|
-
it "supports gt filter" do
|
106
|
-
filter = @ns.new(:is_greater_than, @time2)
|
107
|
-
filter.match?(@file1).should be_false
|
108
|
-
filter.match?(@file2).should be_false
|
109
|
-
filter.match?(@file3).should be_true
|
110
|
-
filter.match?(@file4).should be_true
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|
116
|
-
|
@@ -1,40 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'file/visitor/filter/name'
|
3
|
-
|
4
|
-
describe File::Visitor::Filter::Name do
|
5
|
-
|
6
|
-
it 'can be created with new()' do
|
7
|
-
filter = File::Visitor::Filter::Name.new('hoge')
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'can match filename string' do
|
11
|
-
filter = File::Visitor::Filter::Name.new('file')
|
12
|
-
|
13
|
-
filter.match?("/path/to/file").should be_true
|
14
|
-
filter.match?("file").should be_true
|
15
|
-
|
16
|
-
filter.match?("file.txt").should be_false
|
17
|
-
filter.match?(".file").should be_false
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'can match filename regexp' do
|
21
|
-
filter = File::Visitor::Filter::Name.new(/file\.\w+/)
|
22
|
-
|
23
|
-
filter.match?("/path/to/file.txt").should be_true
|
24
|
-
filter.match?("/path/to/xxx_file.txt").should be_true
|
25
|
-
filter.match?("file.jpg").should be_true
|
26
|
-
|
27
|
-
filter.match?("/path/to/file").should be_false
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'can be stringified' do
|
31
|
-
str1 = File::Visitor::Filter::Name.new("strfilter").to_s
|
32
|
-
str2 = File::Visitor::Filter::Name.new(/filename\.\w+/).to_s
|
33
|
-
|
34
|
-
str1.should be_a String
|
35
|
-
str2.should be_a String
|
36
|
-
|
37
|
-
str1.should_not == str2
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'file/visitor/filter/proc'
|
3
|
-
|
4
|
-
describe File::Visitor::Filter::Proc do
|
5
|
-
|
6
|
-
it 'can be created with new()' do
|
7
|
-
filter = File::Visitor::Filter::Proc.new(proc { |path| true })
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'raises error when non-proc instance given' do
|
11
|
-
expect {
|
12
|
-
filter = File::Visitor::Filter::Proc.new(true)
|
13
|
-
}.to raise_error(ArgumentError, /Proc instance required/)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'can match path with custom proc' do
|
17
|
-
filter = File::Visitor::Filter::Proc.new(proc { |path|
|
18
|
-
path =~ /log/
|
19
|
-
})
|
20
|
-
filter.match?("/tmp/hoge/fuga.log").should be_true
|
21
|
-
filter.match?("/tmp/log/fuga.txt").should be_true
|
22
|
-
filter.match?("/tmp/hoge/fuga").should be_false
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'can be stringified' do
|
26
|
-
filter1 = File::Visitor::Filter::Proc.new(proc { true })
|
27
|
-
filter2 = File::Visitor::Filter::Proc.new(proc { false })
|
28
|
-
|
29
|
-
filter1.to_s.should be_a String
|
30
|
-
filter2.to_s.should be_a String
|
31
|
-
|
32
|
-
filter1.to_s.should_not == filter2.to_s
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
@@ -1,26 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'file/visitor/filter_dispatcher'
|
3
|
-
|
4
|
-
describe File::Visitor::FilterDispatcher do
|
5
|
-
|
6
|
-
it "dispatches filter classname" do
|
7
|
-
File::Visitor::FilterDispatcher.dispatch(:name)\
|
8
|
-
.should == File::Visitor::Filter::Name
|
9
|
-
File::Visitor::FilterDispatcher.dispatch(:filename)\
|
10
|
-
.should == File::Visitor::Filter::Name
|
11
|
-
|
12
|
-
File::Visitor::FilterDispatcher.dispatch(:ext)\
|
13
|
-
.should == File::Visitor::Filter::Ext
|
14
|
-
File::Visitor::FilterDispatcher.dispatch(:extension)\
|
15
|
-
.should == File::Visitor::Filter::Ext
|
16
|
-
File::Visitor::FilterDispatcher.dispatch(:filetype)\
|
17
|
-
.should == File::Visitor::Filter::Ext
|
18
|
-
|
19
|
-
File::Visitor::FilterDispatcher.dispatch(:mtime)\
|
20
|
-
.should == File::Visitor::Filter::Mtime
|
21
|
-
File::Visitor::FilterDispatcher.dispatch(:modified_time)\
|
22
|
-
.should == File::Visitor::Filter::Mtime
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
|
@@ -1,156 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'file/visitor/time_utils'
|
3
|
-
|
4
|
-
describe File::Visitor::TimeUtils do
|
5
|
-
include File::Visitor::TimeUtils
|
6
|
-
|
7
|
-
describe 'unitexp2sec' do
|
8
|
-
|
9
|
-
it "returns seconds with unit string of time" do
|
10
|
-
unitexp2sec(1, :sec).should == 1
|
11
|
-
unitexp2sec(2, :sec).should == 2
|
12
|
-
unitexp2sec(3, :sec).should == 3
|
13
|
-
|
14
|
-
unitexp2sec(1, :min).should == 60
|
15
|
-
unitexp2sec(2, :min).should == 120
|
16
|
-
unitexp2sec(3, :min).should == 180
|
17
|
-
|
18
|
-
unitexp2sec(1, :hour).should == 60 * 60 * 1
|
19
|
-
unitexp2sec(2, :hour).should == 60 * 60 * 2
|
20
|
-
unitexp2sec(3, :hour).should == 60 * 60 * 3
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns seconds with unit string aliases" do
|
24
|
-
unitexp2sec(1, :second).should == 1
|
25
|
-
unitexp2sec(2, :seconds).should == 2
|
26
|
-
unitexp2sec(3, :secs).should == 3
|
27
|
-
|
28
|
-
unitexp2sec(1, :mins).should == 60
|
29
|
-
unitexp2sec(2, :minute).should == 120
|
30
|
-
unitexp2sec(3, :minutes).should == 180
|
31
|
-
|
32
|
-
unitexp2sec(1, :hours).should == 60 * 60 * 1
|
33
|
-
unitexp2sec(2, :days).should == 60 * 60 * 24 * 2
|
34
|
-
unitexp2sec(3, :months).should == 60 * 60 * 24 * 31 * 3
|
35
|
-
end
|
36
|
-
|
37
|
-
it "raises error with invalid count" do
|
38
|
-
expect { unitexp2sec(nil, :day) }.to \
|
39
|
-
raise_error(ArgumentError, %r/time count must be/)
|
40
|
-
expect { unitexp2sec(-1, :day) }.to \
|
41
|
-
raise_error(ArgumentError, %r/time count must be/)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "raises error with invalid unit name" do
|
45
|
-
expect { unitexp2sec(1 , :nichi) }.to \
|
46
|
-
raise_error(ArgumentError, %r/unknown time unit/)
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
describe 'compare_time' do
|
52
|
-
|
53
|
-
it "supports equals_to" do
|
54
|
-
compare_time(
|
55
|
-
'2011-12-01 00:00:04',
|
56
|
-
:equals_to,
|
57
|
-
'2011-12-01 00:00:05'
|
58
|
-
).should be_false
|
59
|
-
|
60
|
-
compare_time(
|
61
|
-
'2011-12-01 00:00:05',
|
62
|
-
:equals_to,
|
63
|
-
'2011-12-01 00:00:05'
|
64
|
-
).should be_true
|
65
|
-
|
66
|
-
compare_time(
|
67
|
-
'2011-12-01 00:00:05',
|
68
|
-
:equals_to,
|
69
|
-
'2011-12-01 00:00:06'
|
70
|
-
).should be_false
|
71
|
-
end
|
72
|
-
|
73
|
-
it "supports is_greater_than" do
|
74
|
-
compare_time(
|
75
|
-
'2011-12-01 00:00:04',
|
76
|
-
:is_greater_than,
|
77
|
-
'2011-12-01 00:00:05'
|
78
|
-
).should be_false
|
79
|
-
|
80
|
-
compare_time(
|
81
|
-
'2011-12-01 00:00:05',
|
82
|
-
:is_greater_than,
|
83
|
-
'2011-12-01 00:00:05'
|
84
|
-
).should be_false
|
85
|
-
|
86
|
-
compare_time(
|
87
|
-
'2011-12-01 00:00:06',
|
88
|
-
:is_greater_than,
|
89
|
-
'2011-12-01 00:00:05'
|
90
|
-
).should be_true
|
91
|
-
end
|
92
|
-
|
93
|
-
it "supports is_greater_than=" do
|
94
|
-
compare_time(
|
95
|
-
'2011-12-01 00:00:04',
|
96
|
-
:is_greater_than=,
|
97
|
-
'2011-12-01 00:00:05'
|
98
|
-
).should be_false
|
99
|
-
|
100
|
-
compare_time(
|
101
|
-
'2011-12-01 00:00:05',
|
102
|
-
:is_greater_than=,
|
103
|
-
'2011-12-01 00:00:05'
|
104
|
-
).should be_true
|
105
|
-
|
106
|
-
compare_time(
|
107
|
-
'2011-12-01 00:00:06',
|
108
|
-
:is_greater_than=,
|
109
|
-
'2011-12-01 00:00:05'
|
110
|
-
).should be_true
|
111
|
-
end
|
112
|
-
|
113
|
-
it "supports is_less_than" do
|
114
|
-
compare_time(
|
115
|
-
'2011-12-01 00:00:04',
|
116
|
-
:is_less_than,
|
117
|
-
'2011-12-01 00:00:05'
|
118
|
-
).should be_true
|
119
|
-
|
120
|
-
compare_time(
|
121
|
-
'2011-12-01 00:00:05',
|
122
|
-
:is_less_than,
|
123
|
-
'2011-12-01 00:00:05'
|
124
|
-
).should be_false
|
125
|
-
|
126
|
-
compare_time(
|
127
|
-
'2011-12-01 00:00:06',
|
128
|
-
:is_less_than,
|
129
|
-
'2011-12-01 00:00:05'
|
130
|
-
).should be_false
|
131
|
-
end
|
132
|
-
|
133
|
-
it "supports is_less_than=" do
|
134
|
-
compare_time(
|
135
|
-
'2011-12-01 00:00:04',
|
136
|
-
:is_less_than=,
|
137
|
-
'2011-12-01 00:00:05'
|
138
|
-
).should be_true
|
139
|
-
|
140
|
-
compare_time(
|
141
|
-
'2011-12-01 00:00:05',
|
142
|
-
:is_less_than=,
|
143
|
-
'2011-12-01 00:00:05'
|
144
|
-
).should be_true
|
145
|
-
|
146
|
-
compare_time(
|
147
|
-
'2011-12-01 00:00:06',
|
148
|
-
:is_less_than=,
|
149
|
-
'2011-12-01 00:00:05'
|
150
|
-
).should be_false
|
151
|
-
end
|
152
|
-
|
153
|
-
end
|
154
|
-
|
155
|
-
end
|
156
|
-
|