maid 0.5.0 → 0.6.0.alpha.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.
- data/.ruby-version +1 -1
- data/.travis.yml +6 -1
- data/AUTHORS.md +2 -0
- data/ChangeLog +10 -0
- data/README.md +25 -1
- data/Rakefile +10 -0
- data/lib/maid/rake/single_rule.rb +34 -0
- data/lib/maid/rake/task.rb +38 -0
- data/lib/maid/tools.rb +35 -16
- data/lib/maid/version.rb +1 -1
- data/lib/maid.rb +2 -0
- data/maid.gemspec +4 -4
- data/script/vagrant-provision +14 -3
- data/spec/dependency_spec.rb +10 -10
- data/spec/lib/maid/app_spec.rb +32 -32
- data/spec/lib/maid/maid_spec.rb +56 -56
- data/spec/lib/maid/numeric_extensions_spec.rb +10 -10
- data/spec/lib/maid/platform_spec.rb +7 -7
- data/spec/lib/maid/rake/single_rule_spec.rb +93 -0
- data/spec/lib/maid/rake/task_spec.rb +51 -0
- data/spec/lib/maid/rule_spec.rb +2 -2
- data/spec/lib/maid/tools_spec.rb +134 -131
- data/spec/lib/maid/trash_migration_spec.rb +9 -9
- data/spec/lib/maid/user_agent_spec.rb +1 -1
- data/spec/lib/maid_spec.rb +10 -9
- data/spec/spec_helper.rb +4 -4
- metadata +158 -62
data/spec/lib/maid/maid_spec.rb
CHANGED
@@ -9,36 +9,36 @@ module Maid
|
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '.new' do
|
12
|
-
it '
|
13
|
-
Logger.
|
12
|
+
it 'sets up a logger with the default path' do
|
13
|
+
expect(Logger).to receive(:new).with(Maid::DEFAULTS[:log_device], anything, anything)
|
14
14
|
Maid.new
|
15
15
|
end
|
16
16
|
|
17
|
-
it '
|
17
|
+
it 'sets up a logger with the given path, when provided' do
|
18
18
|
log_device = '/var/log/maid.log'
|
19
|
-
Logger.
|
19
|
+
expect(Logger).to receive(:new).with(log_device, anything, anything)
|
20
20
|
Maid.new(:log_device => log_device)
|
21
21
|
end
|
22
22
|
|
23
|
-
it '
|
24
|
-
Logger.
|
23
|
+
it 'rotates the log with the default settings' do
|
24
|
+
expect(Logger).to receive(:new).with(anything, Maid::DEFAULTS[:log_shift_age], Maid::DEFAULTS[:log_shift_size])
|
25
25
|
Maid.new
|
26
26
|
end
|
27
27
|
|
28
|
-
it '
|
29
|
-
Logger.
|
28
|
+
it 'rotates the log with the given settings, when provided' do
|
29
|
+
expect(Logger).to receive(:new).with(anything, 42, 1_000_000)
|
30
30
|
Maid.new(:log_shift_age => 42, :log_shift_size => 1_000_000)
|
31
31
|
end
|
32
32
|
|
33
|
-
it '
|
34
|
-
FileUtils.
|
33
|
+
it 'makes the log directory in case it does not exist' do
|
34
|
+
expect(FileUtils).to receive(:mkdir_p).with('/home/username/log')
|
35
35
|
Maid.new(:log_device => '/home/username/log/maid.log')
|
36
36
|
end
|
37
37
|
|
38
|
-
it '
|
38
|
+
it 'takes a logger object during intialization' do
|
39
39
|
Logger.unstub(:new)
|
40
40
|
maid = Maid.new(:logger => @logger)
|
41
|
-
maid.logger.
|
41
|
+
expect(maid.logger).to eq(@logger)
|
42
42
|
end
|
43
43
|
|
44
44
|
describe 'platform-specific behavior' do
|
@@ -54,11 +54,11 @@ module Maid
|
|
54
54
|
XDG.stub(:[]).with('DATA_HOME') { "#{ @home }/.local/share" }
|
55
55
|
end
|
56
56
|
|
57
|
-
it '
|
57
|
+
it 'set the trash to the correct default path' do
|
58
58
|
trash_path = "#{ @home }/.local/share/Trash/files/"
|
59
|
-
FileUtils.
|
59
|
+
expect(FileUtils).to receive(:mkdir_p).with(trash_path).once
|
60
60
|
maid = Maid.new
|
61
|
-
maid.trash_path.
|
61
|
+
expect(maid.trash_path).to eq(trash_path)
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -67,60 +67,60 @@ module Maid
|
|
67
67
|
Platform.stub(:osx?) { true }
|
68
68
|
end
|
69
69
|
|
70
|
-
it '
|
70
|
+
it 'sets the trash to the correct default path' do
|
71
71
|
trash_path = "#{ @home }/.Trash/"
|
72
|
-
FileUtils.
|
72
|
+
expect(FileUtils).to receive(:mkdir_p).with(trash_path).once
|
73
73
|
maid = Maid.new
|
74
|
-
maid.trash_path.
|
74
|
+
expect(maid.trash_path).to eq(trash_path)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
78
|
context 'when running on an unsupported platform' do
|
79
79
|
it 'does not implement trashing files' do
|
80
|
-
lambda { Maid.new }.
|
80
|
+
expect(lambda { Maid.new }).to raise_error(NotImplementedError)
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
it '
|
85
|
+
it 'sets the trash to the given path, if provided' do
|
86
86
|
trash_path = '/home/username/tmp/my_trash/'
|
87
|
-
FileUtils.
|
87
|
+
expect(FileUtils).to receive(:mkdir_p).with(trash_path).once
|
88
88
|
maid = Maid.new(:trash_path => trash_path)
|
89
|
-
maid.trash_path.
|
90
|
-
maid.trash_path.
|
89
|
+
expect(maid.trash_path).not_to be_nil
|
90
|
+
expect(maid.trash_path).to eq(trash_path)
|
91
91
|
end
|
92
92
|
|
93
|
-
it '
|
94
|
-
@logger.
|
93
|
+
it 'sets the progname for the logger' do
|
94
|
+
expect(@logger).to receive(:progname=).with(Maid::DEFAULTS[:progname])
|
95
95
|
Maid.new
|
96
96
|
end
|
97
97
|
|
98
|
-
it '
|
99
|
-
@logger.
|
98
|
+
it 'sets the progname for the logger to the given name, if provided' do
|
99
|
+
expect(@logger).to receive(:progname=).with('Fran')
|
100
100
|
Maid.new(:progname => 'Fran')
|
101
101
|
end
|
102
102
|
|
103
|
-
it '
|
104
|
-
Maid.new.file_options.
|
103
|
+
it 'sets the file options to the defaults' do
|
104
|
+
expect(Maid.new.file_options).to eq(Maid::DEFAULTS[:file_options])
|
105
105
|
end
|
106
106
|
|
107
|
-
it '
|
107
|
+
it 'sets the file options to the given options, if provided' do
|
108
108
|
maid = Maid.new(:file_options => { :verbose => true })
|
109
|
-
maid.file_options.
|
109
|
+
expect(maid.file_options).to eq(:verbose => true)
|
110
110
|
end
|
111
111
|
|
112
|
-
it '
|
113
|
-
Maid.new.rules_path.
|
112
|
+
it 'sets the rules path' do
|
113
|
+
expect(Maid.new.rules_path).to eq(Maid::DEFAULTS[:rules_path])
|
114
114
|
end
|
115
115
|
|
116
|
-
it '
|
116
|
+
it 'sets the rules pathto the given path, if provided' do
|
117
117
|
maid = Maid.new(:rules_path => 'Maidfile')
|
118
|
-
maid.rules_path.
|
118
|
+
expect(maid.rules_path).to eq('Maidfile')
|
119
119
|
end
|
120
120
|
|
121
|
-
it '
|
121
|
+
it 'ignores nil options' do
|
122
122
|
maid = Maid.new(:rules_path => nil)
|
123
|
-
maid.rules_path.
|
123
|
+
expect(maid.rules_path).to eq(Maid::DEFAULTS[:rules_path])
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
@@ -130,14 +130,14 @@ module Maid
|
|
130
130
|
@logger.stub(:info)
|
131
131
|
end
|
132
132
|
|
133
|
-
it '
|
134
|
-
@logger.
|
135
|
-
@logger.
|
133
|
+
it 'logs start and finish' do
|
134
|
+
expect(@logger).to receive(:info).with('Started')
|
135
|
+
expect(@logger).to receive(:info).with('Finished')
|
136
136
|
@maid.clean
|
137
137
|
end
|
138
138
|
|
139
|
-
it '
|
140
|
-
@maid.
|
139
|
+
it 'follows the given rules' do
|
140
|
+
expect(@maid).to receive(:follow_rules)
|
141
141
|
@maid.clean
|
142
142
|
end
|
143
143
|
end
|
@@ -148,14 +148,14 @@ module Maid
|
|
148
148
|
@maid = Maid.new
|
149
149
|
end
|
150
150
|
|
151
|
-
it '
|
152
|
-
::Maid.
|
151
|
+
it 'sets the Maid instance' do
|
152
|
+
expect(::Maid).to receive(:with_instance).with(@maid)
|
153
153
|
@maid.load_rules
|
154
154
|
end
|
155
155
|
|
156
|
-
it '
|
156
|
+
it 'gives an error on STDERR if there is a LoadError' do
|
157
157
|
Kernel.stub(:load).and_raise(LoadError)
|
158
|
-
STDERR.
|
158
|
+
expect(STDERR).to receive(:puts)
|
159
159
|
@maid.load_rules
|
160
160
|
end
|
161
161
|
end
|
@@ -165,26 +165,26 @@ module Maid
|
|
165
165
|
@maid = Maid.new
|
166
166
|
end
|
167
167
|
|
168
|
-
it '
|
169
|
-
@maid.rules.length.
|
168
|
+
it 'adds a rule to the list of rules' do
|
169
|
+
expect(@maid.rules.length).to eq(0)
|
170
170
|
|
171
171
|
@maid.rule('description') do
|
172
172
|
'instructions'
|
173
173
|
end
|
174
174
|
|
175
|
-
@maid.rules.length.
|
176
|
-
@maid.rules.first.description.
|
175
|
+
expect(@maid.rules.length).to eq(1)
|
176
|
+
expect(@maid.rules.first.description).to eq('description')
|
177
177
|
end
|
178
178
|
end
|
179
179
|
|
180
180
|
describe '#follow_rules' do
|
181
|
-
it '
|
181
|
+
it 'follows each rule' do
|
182
182
|
n = 3
|
183
183
|
maid = Maid.new
|
184
|
-
@logger.
|
184
|
+
expect(@logger).to receive(:info).exactly(n).times
|
185
185
|
rules = (1..n).map do |n|
|
186
186
|
d = double("rule ##{ n }", :description => 'description')
|
187
|
-
d.
|
187
|
+
expect(d).to receive(:follow)
|
188
188
|
d
|
189
189
|
end
|
190
190
|
maid.instance_eval { @rules = rules }
|
@@ -198,12 +198,12 @@ module Maid
|
|
198
198
|
@maid = Maid.new
|
199
199
|
end
|
200
200
|
|
201
|
-
it '
|
202
|
-
lambda { @maid.cmd('not-a-real-command arg1 arg2') }.
|
201
|
+
it 'reports `not-a-real-command` as not being a supported command' do
|
202
|
+
expect(lambda { @maid.cmd('not-a-real-command arg1 arg2') }).to raise_error(NotImplementedError)
|
203
203
|
end
|
204
204
|
|
205
205
|
it 'should report `echo` as a real command' do
|
206
|
-
lambda { @maid.cmd('echo .') }.
|
206
|
+
expect(lambda { @maid.cmd('echo .') }).not_to raise_error
|
207
207
|
end
|
208
208
|
end
|
209
209
|
end
|
@@ -1,25 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Maid::NumericExtensions::Time, '#since?' do
|
4
|
-
it '
|
5
|
-
1.week.since?(2.weeks.ago).
|
4
|
+
it 'tells you that 1 week ago happened after 2 weeks ago' do
|
5
|
+
expect(1.week.since?(2.weeks.ago)).to be(true)
|
6
6
|
end
|
7
7
|
|
8
|
-
it '
|
9
|
-
2.week.since?(1.weeks.ago).
|
8
|
+
it 'tells you that 2 weeks ago was not after 1 week ago' do
|
9
|
+
expect(2.week.since?(1.weeks.ago)).to be(false)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
describe Maid::NumericExtensions::SizeToKb do
|
14
|
-
it '
|
15
|
-
1.megabyte.
|
14
|
+
it 'tells you that 1 megabyte equals 1024 kilobytes' do
|
15
|
+
expect(1.megabyte).to eq(1024.kilobytes)
|
16
16
|
end
|
17
17
|
|
18
|
-
it '
|
19
|
-
1.gigabyte.
|
18
|
+
it 'tells you that 1 gigabyte equals 1024 megabytes' do
|
19
|
+
expect(1.gigabyte).to eq(1024.megabytes)
|
20
20
|
end
|
21
21
|
|
22
|
-
it '
|
23
|
-
1.terabyte.
|
22
|
+
it 'tells you that 1 terabyte equals 1024 gigabytes' do
|
23
|
+
expect(1.terabyte).to eq(1024.gigabytes)
|
24
24
|
end
|
25
25
|
end
|
@@ -9,7 +9,7 @@ module Maid
|
|
9
9
|
describe 'determining the host OS' do
|
10
10
|
it 'delegates to RbConfig' do
|
11
11
|
stub_host_os('foo')
|
12
|
-
subject.host_os.
|
12
|
+
expect(subject.host_os).to eq('foo')
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -19,15 +19,15 @@ module Maid
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'is identified as Linux' do
|
22
|
-
subject.linux
|
22
|
+
expect(subject.linux?).to be(true)
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'is not identified as OS X' do
|
26
|
-
subject.osx
|
26
|
+
expect(subject.osx?).to be(false)
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'locate is "locate"' do
|
30
|
-
Platform::Commands.locate.
|
30
|
+
expect(Platform::Commands.locate).to match(/locate/)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -37,15 +37,15 @@ module Maid
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'is not identified as Linux' do
|
40
|
-
subject.linux
|
40
|
+
expect(subject.linux?).to be(false)
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'is identified as OS X' do
|
44
|
-
subject.osx
|
44
|
+
expect(subject.osx?).to be(true)
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'locate is "mdfind"' do
|
48
|
-
Platform::Commands.locate.
|
48
|
+
expect(Platform::Commands.locate).to match(/mdfind/)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Maid
|
4
|
+
module Rake
|
5
|
+
describe SingleRule do
|
6
|
+
subject(:single_rule) { described_class.new name, task }
|
7
|
+
let(:name) { double(:rule_description) }
|
8
|
+
let(:task) { Proc.new {} }
|
9
|
+
|
10
|
+
describe '#initialize' do
|
11
|
+
its(:name) { should eq(name) }
|
12
|
+
its(:task) { should eq(task) }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#clean' do
|
16
|
+
let(:maid) { double(:maid_instance) }
|
17
|
+
|
18
|
+
before do
|
19
|
+
single_rule.maid_instance = maid
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'calls #clean on maid_instance' do
|
23
|
+
expect(maid).to receive(:clean)
|
24
|
+
single_rule.clean
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#maid_instance' do
|
29
|
+
let(:maid_instance) { single_rule.maid_instance }
|
30
|
+
|
31
|
+
it 'instantiates a Maid with the proper arguments' do
|
32
|
+
expect(Maid).to receive(:new).with(rules_path: '/dev/null')
|
33
|
+
maid_instance
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'returns a Maid instance' do
|
37
|
+
expect(maid_instance).to be_a(Maid)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'memoizes the result' do
|
41
|
+
expect(Maid).to receive(:new).once
|
42
|
+
maid_instance
|
43
|
+
maid_instance
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#define' do
|
48
|
+
let(:maid) { double(:maid_instance) }
|
49
|
+
|
50
|
+
before { single_rule.maid_instance = maid }
|
51
|
+
|
52
|
+
it 'defines a single rule upon maid instance' do
|
53
|
+
expect(maid).to receive(:rule).with(name, &task)
|
54
|
+
single_rule.define
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns self' do
|
58
|
+
allow(maid).to receive(:rule).with(name, &task)
|
59
|
+
expect(single_rule.define).to eq(single_rule)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '.perform' do
|
64
|
+
subject(:perform) { described_class.perform name, task }
|
65
|
+
let(:name) { double(:name) }
|
66
|
+
let(:task) { Proc.new {} }
|
67
|
+
|
68
|
+
it 'creates an instance' do
|
69
|
+
expect(described_class)
|
70
|
+
.to receive(:new)
|
71
|
+
.with(name, task)
|
72
|
+
.and_call_original
|
73
|
+
perform
|
74
|
+
end
|
75
|
+
|
76
|
+
describe 'instance methods calling' do
|
77
|
+
let(:instance) { double(:single_rule).as_null_object }
|
78
|
+
|
79
|
+
before do
|
80
|
+
allow(described_class).to receive(:new).and_return(instance)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'calls #define and #clean on instance' do
|
84
|
+
expect(instance).to receive(:define)
|
85
|
+
expect(instance).to receive(:clean)
|
86
|
+
perform
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Maid
|
4
|
+
module Rake
|
5
|
+
describe Task do
|
6
|
+
|
7
|
+
before(:all) { ::Rake::TaskManager.record_task_metadata = true }
|
8
|
+
|
9
|
+
subject(:define_task) { described_class.new *args, &instructions }
|
10
|
+
let(:instructions) { Proc.new {} }
|
11
|
+
|
12
|
+
describe '#initialize' do
|
13
|
+
before { ::Rake::Task.clear }
|
14
|
+
|
15
|
+
describe 'task body' do
|
16
|
+
let(:args) { :foobar }
|
17
|
+
|
18
|
+
it 'sends given instructions to SingleRule' do
|
19
|
+
expect(SingleRule)
|
20
|
+
.to receive(:perform)
|
21
|
+
.with('foobar', instructions)
|
22
|
+
define_task && ::Rake::Task[:foobar].execute
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'task description' do
|
27
|
+
context 'given just the task name as argument' do
|
28
|
+
let(:args) { [:foobar] }
|
29
|
+
|
30
|
+
it 'defines a rake task with default description' do
|
31
|
+
desc = described_class.const_get 'DEFAULT_DESCRIPTION'
|
32
|
+
|
33
|
+
define_task
|
34
|
+
expect(::Rake::Task[:foobar].comment).to eq(desc)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'given a description argument' do
|
39
|
+
let(:args) { [:foobar, description: 'Custom description'] }
|
40
|
+
|
41
|
+
it 'defines a rake task with the description provided' do
|
42
|
+
define_task
|
43
|
+
expect(::Rake::Task[:foobar].comment).to eq('Custom description')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/spec/lib/maid/rule_spec.rb
CHANGED