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/tools_spec.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
# Workaround for Ruby 2.1.0, remove after https://github.com/defunkt/fakefs/pull/209 is released
|
5
|
-
if RUBY_VERSION == '2.1.0'
|
5
|
+
if RUBY_VERSION == '2.1.0' || RUBY_VERSION == '2.1.1'
|
6
6
|
module FakeFS
|
7
7
|
class Dir
|
8
8
|
def self.entries(dirname, opts = {})
|
@@ -25,7 +25,7 @@ module Maid
|
|
25
25
|
@home = File.expand_path('~')
|
26
26
|
@now = Time.now
|
27
27
|
|
28
|
-
Maid.ancestors.
|
28
|
+
expect(Maid.ancestors).to include(Tools)
|
29
29
|
|
30
30
|
@logger = double('Logger').as_null_object
|
31
31
|
@maid = Maid.new(:logger => @logger)
|
@@ -45,24 +45,24 @@ module Maid
|
|
45
45
|
FileUtils.mkdir_p(@dst_dir = '~/Destination/')
|
46
46
|
end
|
47
47
|
|
48
|
-
it '
|
48
|
+
it 'moves expanded paths, passing file_options' do
|
49
49
|
@maid.move(@src_file, @dst_dir)
|
50
|
-
File.exists?(@dst_dir + @file_name).
|
50
|
+
expect(File.exists?(@dst_dir + @file_name)).to be(true)
|
51
51
|
end
|
52
52
|
|
53
|
-
it '
|
54
|
-
@logger.
|
53
|
+
it 'logs the move' do
|
54
|
+
expect(@logger).to receive(:info)
|
55
55
|
@maid.move(@src_file, @dst_dir)
|
56
56
|
end
|
57
57
|
|
58
|
-
it '
|
58
|
+
it 'handles multiple from paths' do
|
59
59
|
second_src_file = @src_dir + (second_file_name = 'bar.zip')
|
60
60
|
FileUtils.touch(second_src_file)
|
61
61
|
src_files = [@src_file, second_src_file]
|
62
62
|
|
63
63
|
@maid.move(src_files, @dst_dir)
|
64
|
-
File.exist?(@dst_dir + @file_name).
|
65
|
-
File.exist?(@dst_dir + second_file_name).
|
64
|
+
expect(File.exist?(@dst_dir + @file_name)).to be(true)
|
65
|
+
expect(File.exist?(@dst_dir + second_file_name)).to be(true)
|
66
66
|
end
|
67
67
|
|
68
68
|
context 'given the destination directory does not exist' do
|
@@ -71,8 +71,8 @@ module Maid
|
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'does not overwrite when moving' do
|
74
|
-
FileUtils.
|
75
|
-
@logger.
|
74
|
+
expect(FileUtils).not_to receive(:mv)
|
75
|
+
expect(@logger).to receive(:warn).once
|
76
76
|
|
77
77
|
another_file = "#@src_file.1"
|
78
78
|
@maid.move([@src_file, another_file], @dst_dir)
|
@@ -93,17 +93,17 @@ module Maid
|
|
93
93
|
end
|
94
94
|
|
95
95
|
it 'creates needed directories' do
|
96
|
-
File.directory?(@expanded_dst_dir).
|
96
|
+
expect(File.directory?(@expanded_dst_dir)).to be(false)
|
97
97
|
@maid.rename(@src_file, @dst_name)
|
98
|
-
File.directory?(@expanded_dst_dir).
|
98
|
+
expect(File.directory?(@expanded_dst_dir)).to be(true)
|
99
99
|
end
|
100
100
|
|
101
101
|
it 'moves the file from the source to the destination' do
|
102
|
-
File.exists?(@expanded_src_name).
|
103
|
-
File.exists?(@expanded_dst_name).
|
102
|
+
expect(File.exists?(@expanded_src_name)).to be(true)
|
103
|
+
expect(File.exists?(@expanded_dst_name)).to be(false)
|
104
104
|
@maid.rename(@src_file, @dst_name)
|
105
|
-
File.exists?(@expanded_src_name).
|
106
|
-
File.exists?(@expanded_dst_name).
|
105
|
+
expect(File.exists?(@expanded_src_name)).to be(false)
|
106
|
+
expect(File.exists?(@expanded_dst_name)).to be(true)
|
107
107
|
end
|
108
108
|
|
109
109
|
context 'given the target already exists' do
|
@@ -113,7 +113,7 @@ module Maid
|
|
113
113
|
end
|
114
114
|
|
115
115
|
it 'does not move' do
|
116
|
-
@logger.
|
116
|
+
expect(@logger).to receive(:warn)
|
117
117
|
|
118
118
|
@maid.rename(@src_file, @dst_name)
|
119
119
|
end
|
@@ -130,43 +130,43 @@ module Maid
|
|
130
130
|
@trash_file = File.join(@trash_path, @file_name)
|
131
131
|
end
|
132
132
|
|
133
|
-
it '
|
133
|
+
it 'moves the path to the trash' do
|
134
134
|
@maid.trash(@src_file)
|
135
|
-
File.exist?(@trash_file).
|
135
|
+
expect(File.exist?(@trash_file)).to be(true)
|
136
136
|
end
|
137
137
|
|
138
|
-
it '
|
138
|
+
it 'uses a safe path if the target exists' do
|
139
139
|
# Without an offset, ISO8601 parses to local time, which is what we want here.
|
140
140
|
Timecop.freeze(Time.parse('2011-05-22T16:53:52')) do
|
141
141
|
FileUtils.touch(@trash_file)
|
142
142
|
@maid.trash(@src_file)
|
143
143
|
new_trash_file = File.join(@trash_path, @file_name + ' 2011-05-22-16-53-52')
|
144
|
-
File.exist?(new_trash_file).
|
144
|
+
expect(File.exist?(new_trash_file)).to be(true)
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
|
-
it '
|
148
|
+
it 'handles multiple paths' do
|
149
149
|
second_src_file = @src_dir + (second_file_name = 'bar.zip')
|
150
150
|
FileUtils.touch(second_src_file)
|
151
151
|
@src_files = [@src_file, second_src_file]
|
152
152
|
@maid.trash(@src_files)
|
153
153
|
|
154
154
|
second_trash_file = File.join(@trash_path, second_file_name)
|
155
|
-
File.exist?(@trash_file).
|
156
|
-
File.exist?(second_trash_file).
|
155
|
+
expect(File.exist?(@trash_file)).to be(true)
|
156
|
+
expect(File.exist?(second_trash_file)).to be(true)
|
157
157
|
end
|
158
158
|
|
159
|
-
it '
|
159
|
+
it 'removes files greater then the remove option size' do
|
160
160
|
@maid.stub(:disk_usage) { 1025 }
|
161
161
|
@maid.trash(@src_file, :remove_over => 1.mb)
|
162
|
-
File.exist?(@src_file).
|
163
|
-
File.exist?(@trash_file).
|
162
|
+
expect(File.exist?(@src_file)).not_to be(true)
|
163
|
+
expect(File.exist?(@trash_file)).not_to be(true)
|
164
164
|
end
|
165
165
|
|
166
|
-
it '
|
166
|
+
it 'trashes files less then the remove option size' do
|
167
167
|
@maid.stub(:disk_usage) { 1023 }
|
168
168
|
@maid.trash(@src_file, :remove_over => 1.mb)
|
169
|
-
File.exist?(@trash_file).
|
169
|
+
expect(File.exist?(@trash_file)).to be(true)
|
170
170
|
end
|
171
171
|
end
|
172
172
|
|
@@ -179,36 +179,36 @@ module Maid
|
|
179
179
|
@options = @maid.file_options
|
180
180
|
end
|
181
181
|
|
182
|
-
it '
|
182
|
+
it 'removes expanded paths, passing options' do
|
183
183
|
@maid.remove(@src_file)
|
184
|
-
File.exist?(@src_file).
|
184
|
+
expect(File.exist?(@src_file)).to be(false)
|
185
185
|
end
|
186
186
|
|
187
|
-
it '
|
188
|
-
@logger.
|
187
|
+
it 'logs the remove' do
|
188
|
+
expect(@logger).to receive(:info)
|
189
189
|
@maid.remove(@src_file)
|
190
190
|
end
|
191
191
|
|
192
|
-
it '
|
192
|
+
it 'sets the secure option' do
|
193
193
|
@options = @options.merge(:secure => true)
|
194
|
-
FileUtils.
|
194
|
+
expect(FileUtils).to receive(:rm_r).with(@src_file_expand_path, @options)
|
195
195
|
@maid.remove(@src_file, :secure => true)
|
196
196
|
end
|
197
197
|
|
198
|
-
it '
|
198
|
+
it 'sets the force option' do
|
199
199
|
@options = @options.merge(:force => true)
|
200
|
-
FileUtils.
|
200
|
+
expect(FileUtils).to receive(:rm_r).with(@src_file_expand_path, @options)
|
201
201
|
@maid.remove(@src_file, :force => true)
|
202
202
|
end
|
203
203
|
|
204
|
-
it '
|
204
|
+
it 'handles multiple paths' do
|
205
205
|
second_src_file = "#@src_dir/bar.zip"
|
206
206
|
FileUtils.touch(second_src_file)
|
207
207
|
@src_files = [@src_file, second_src_file]
|
208
208
|
|
209
209
|
@maid.remove(@src_files)
|
210
|
-
File.exist?(@src_file).
|
211
|
-
File.exist?(second_src_file).
|
210
|
+
expect(File.exist?(@src_file)).to be(false)
|
211
|
+
expect(File.exist?(second_src_file)).to be(false)
|
212
212
|
end
|
213
213
|
end
|
214
214
|
|
@@ -220,14 +220,14 @@ module Maid
|
|
220
220
|
|
221
221
|
it 'lists files in a directory' do
|
222
222
|
FileUtils.touch(@file)
|
223
|
-
@maid.dir('~/Downloads/*.zip').
|
223
|
+
expect(@maid.dir('~/Downloads/*.zip')).to eq([@file])
|
224
224
|
end
|
225
225
|
|
226
226
|
it 'lists multiple files in alphabetical order' do
|
227
227
|
# It doesn't occur with `FakeFS` as far as I can tell, but Ubuntu (and possibly OS X) can give the results out
|
228
228
|
# of lexical order. That makes using the `dry-run` output difficult to use.
|
229
229
|
Dir.stub(:glob) { %w(/home/foo/b.zip /home/foo/a.zip /home/foo/c.zip) }
|
230
|
-
@maid.dir('~/Downloads/*.zip').
|
230
|
+
expect(@maid.dir('~/Downloads/*.zip')).to eq(%w(/home/foo/a.zip /home/foo/b.zip /home/foo/c.zip))
|
231
231
|
end
|
232
232
|
|
233
233
|
context 'with multiple files' do
|
@@ -238,11 +238,11 @@ module Maid
|
|
238
238
|
end
|
239
239
|
|
240
240
|
it 'list files in all provided globs' do
|
241
|
-
@maid.dir(%w(~/Downloads/*.tgz ~/Downloads/*.zip)).
|
241
|
+
expect(@maid.dir(%w(~/Downloads/*.tgz ~/Downloads/*.zip))).to eq([@file, @other_file])
|
242
242
|
end
|
243
243
|
|
244
244
|
it 'lists files when using regexp-like glob patterns' do
|
245
|
-
@maid.dir('~/Downloads/*.{tgz,zip}').
|
245
|
+
expect(@maid.dir('~/Downloads/*.{tgz,zip}')).to eq([@file, @other_file])
|
246
246
|
end
|
247
247
|
end
|
248
248
|
|
@@ -255,11 +255,11 @@ module Maid
|
|
255
255
|
end
|
256
256
|
|
257
257
|
it 'lists files in directories when using regexp-like glob patterns' do
|
258
|
-
@maid.dir('~/{Desktop,Downloads}/*.zip').
|
258
|
+
expect(@maid.dir('~/{Desktop,Downloads}/*.zip')).to eq([@other_file, @file])
|
259
259
|
end
|
260
260
|
|
261
261
|
it 'lists files in directories when using recursive glob patterns' do
|
262
|
-
@maid.dir('~/**/*.zip').
|
262
|
+
expect(@maid.dir('~/**/*.zip')).to eq([@other_file, @file])
|
263
263
|
end
|
264
264
|
end
|
265
265
|
end
|
@@ -273,14 +273,14 @@ module Maid
|
|
273
273
|
|
274
274
|
it 'lists only files in a directory' do
|
275
275
|
FileUtils.touch(@file)
|
276
|
-
@maid.files('~/Downloads/*.zip').
|
276
|
+
expect(@maid.files('~/Downloads/*.zip')).to eq([@file])
|
277
277
|
end
|
278
278
|
|
279
279
|
it 'lists multiple files in alphabetical order' do
|
280
280
|
# It doesn't occur with `FakeFS` as far as I can tell, but Ubuntu (and possibly OS X) can give the results out
|
281
281
|
# of lexical order. That makes using the `dry-run` output difficult to use.
|
282
282
|
Dir.stub(:glob) { %w(/home/foo/b.zip /home/foo/a.zip /home/foo/c.zip) }
|
283
|
-
@maid.dir('~/Downloads/*.zip').
|
283
|
+
expect(@maid.dir('~/Downloads/*.zip')).to eq(%w(/home/foo/a.zip /home/foo/b.zip /home/foo/c.zip))
|
284
284
|
end
|
285
285
|
|
286
286
|
context 'with multiple files' do
|
@@ -291,11 +291,11 @@ module Maid
|
|
291
291
|
end
|
292
292
|
|
293
293
|
it 'list files in all provided globs' do
|
294
|
-
@maid.dir(%w(~/Downloads/*.tgz ~/Downloads/*.zip)).
|
294
|
+
expect(@maid.dir(%w(~/Downloads/*.tgz ~/Downloads/*.zip))).to eq([@file, @other_file])
|
295
295
|
end
|
296
296
|
|
297
297
|
it 'lists files when using regexp-like glob patterns' do
|
298
|
-
@maid.dir('~/Downloads/*.{tgz,zip}').
|
298
|
+
expect(@maid.dir('~/Downloads/*.{tgz,zip}')).to eq([@file, @other_file])
|
299
299
|
end
|
300
300
|
end
|
301
301
|
|
@@ -309,37 +309,37 @@ module Maid
|
|
309
309
|
end
|
310
310
|
|
311
311
|
it 'lists files in directories when using regexp-like glob patterns' do
|
312
|
-
@maid.dir('~/{Desktop,Downloads}/*.zip').
|
312
|
+
expect(@maid.dir('~/{Desktop,Downloads}/*.zip')).to eq([@other_file, @file])
|
313
313
|
end
|
314
314
|
end
|
315
315
|
end
|
316
316
|
|
317
317
|
describe '#escape_glob' do
|
318
318
|
it 'escapes characters that have special meanings in globs' do
|
319
|
-
@maid.escape_glob('test [tmp]').
|
319
|
+
expect(@maid.escape_glob('test [tmp]')).to eq('test \\[tmp\\]')
|
320
320
|
end
|
321
321
|
end
|
322
322
|
|
323
323
|
describe '#mkdir' do
|
324
|
-
it '
|
324
|
+
it 'creates a directory successfully' do
|
325
325
|
@maid.mkdir('~/Downloads/Music/Pink.Floyd')
|
326
|
-
File.exist?("#@home/Downloads/Music/Pink.Floyd").
|
326
|
+
expect(File.exist?("#@home/Downloads/Music/Pink.Floyd")).to be(true)
|
327
327
|
end
|
328
328
|
|
329
|
-
it '
|
330
|
-
@logger.
|
329
|
+
it 'logs the creation of the directory' do
|
330
|
+
expect(@logger).to receive(:info)
|
331
331
|
@maid.mkdir('~/Downloads/Music/Pink.Floyd')
|
332
332
|
end
|
333
333
|
|
334
334
|
it 'returns the path of the created directory' do
|
335
|
-
@maid.mkdir('~/Reference/Foo').
|
335
|
+
expect(@maid.mkdir('~/Reference/Foo')).to eq("#@home/Reference/Foo")
|
336
336
|
end
|
337
337
|
|
338
338
|
# FIXME: FakeFS doesn't seem to report `File.exist?` properly. However, this has been tested manually.
|
339
339
|
#
|
340
|
-
# it '
|
340
|
+
# it 'respects the noop option' do
|
341
341
|
# @maid.mkdir('~/Downloads/Music/Pink.Floyd')
|
342
|
-
# File.exist?("#@home/Downloads/Music/Pink.Floyd").
|
342
|
+
# expect(File.exist?("#@home/Downloads/Music/Pink.Floyd")).to be(false)
|
343
343
|
# end
|
344
344
|
end
|
345
345
|
|
@@ -352,21 +352,21 @@ module Maid
|
|
352
352
|
@file_expand_path = File.expand_path(@file)
|
353
353
|
end
|
354
354
|
|
355
|
-
it '
|
356
|
-
f = lambda { }
|
357
|
-
Find.
|
355
|
+
it 'delegates to Find.find with an expanded path' do
|
356
|
+
f = lambda { |arg| }
|
357
|
+
expect(Find).to receive(:find).with(@file_expand_path, &f)
|
358
358
|
@maid.find(@file, &f)
|
359
359
|
end
|
360
360
|
|
361
|
-
it "
|
362
|
-
@maid.find(@dir).
|
361
|
+
it "returns an array of all the files' names when no block is given" do
|
362
|
+
expect(@maid.find(@dir)).to eq([@dir_expand_path, @file_expand_path])
|
363
363
|
end
|
364
364
|
end
|
365
365
|
|
366
366
|
describe '#locate' do
|
367
|
-
it '
|
368
|
-
@maid.
|
369
|
-
@maid.locate('foo.zip').
|
367
|
+
it 'locates a file by name' do
|
368
|
+
expect(@maid).to receive(:cmd).and_return("/a/foo.zip\n/b/foo.zip\n")
|
369
|
+
expect(@maid.locate('foo.zip')).to eq(['/a/foo.zip', '/b/foo.zip'])
|
370
370
|
end
|
371
371
|
end
|
372
372
|
|
@@ -375,52 +375,56 @@ module Maid
|
|
375
375
|
Platform.stub(:osx?) { true }
|
376
376
|
end
|
377
377
|
|
378
|
-
it '
|
379
|
-
@maid.
|
380
|
-
@maid.downloaded_from('foo.zip').
|
378
|
+
it 'determines the download site' do
|
379
|
+
expect(@maid).to receive(:cmd).and_return(%((\n "http://www.site.com/foo.zip",\n"http://www.site.com/"\n)))
|
380
|
+
expect(@maid.downloaded_from('foo.zip')).to eq(['http://www.site.com/foo.zip', 'http://www.site.com/'])
|
381
381
|
end
|
382
382
|
end
|
383
383
|
|
384
384
|
describe '#downloading?' do
|
385
385
|
it 'detects a normal file as not being downloaded' do
|
386
|
-
@maid.downloading?('foo.zip').
|
386
|
+
expect(@maid.downloading?('foo.zip')).to be(false)
|
387
387
|
end
|
388
388
|
|
389
389
|
it 'detects when downloading in Firefox' do
|
390
|
-
@maid.downloading?('foo.zip.part').
|
390
|
+
expect(@maid.downloading?('foo.zip.part')).to be(true)
|
391
391
|
end
|
392
392
|
|
393
393
|
it 'detects when downloading in Chrome' do
|
394
|
-
@maid.downloading?('foo.zip.crdownload').
|
394
|
+
expect(@maid.downloading?('foo.zip.crdownload')).to be(true)
|
395
|
+
end
|
396
|
+
|
397
|
+
it 'detects when downloading in Safari' do
|
398
|
+
expect(@maid.downloading?('foo.zip.download')).to be (true)
|
395
399
|
end
|
396
400
|
end
|
397
401
|
|
398
402
|
describe '#duration_s' do
|
399
|
-
it '
|
400
|
-
@maid.
|
401
|
-
@maid.duration_s('foo.mp3').
|
403
|
+
it 'determines audio length' do
|
404
|
+
expect(@maid).to receive(:cmd).and_return('235.705')
|
405
|
+
expect(@maid.duration_s('foo.mp3')).to eq(235.705)
|
402
406
|
end
|
403
407
|
end
|
404
408
|
|
405
409
|
describe '#zipfile_contents' do
|
406
|
-
it '
|
410
|
+
it 'inspects the contents of a .zip file' do
|
407
411
|
entries = [double(:name => 'foo.exe'), double(:name => 'README.txt'), double(:name => 'subdir/anything.txt')]
|
408
412
|
Zip::File.stub(:open).and_yield(entries)
|
409
413
|
|
410
|
-
@maid.zipfile_contents('foo.zip').
|
414
|
+
expect(@maid.zipfile_contents('foo.zip')).to eq(['README.txt', 'foo.exe', 'subdir/anything.txt'])
|
411
415
|
end
|
412
416
|
end
|
413
417
|
|
414
418
|
describe '#disk_usage' do
|
415
|
-
it '
|
416
|
-
@maid.
|
417
|
-
@maid.disk_usage('foo.zip').
|
419
|
+
it 'gives the disk usage of a file' do
|
420
|
+
expect(@maid).to receive(:cmd).and_return('136 foo.zip')
|
421
|
+
expect(@maid.disk_usage('foo.zip')).to eq(136)
|
418
422
|
end
|
419
423
|
|
420
424
|
context 'when the file does not exist' do
|
421
425
|
it 'raises an error' do
|
422
|
-
@maid.
|
423
|
-
lambda { @maid.disk_usage('foo.zip') }.
|
426
|
+
expect(@maid).to receive(:cmd).and_return('du: cannot access `foo.zip\': No such file or directory')
|
427
|
+
expect(lambda { @maid.disk_usage('foo.zip') }).to raise_error(RuntimeError)
|
424
428
|
end
|
425
429
|
end
|
426
430
|
end
|
@@ -430,25 +434,25 @@ module Maid
|
|
430
434
|
@path = "~/test.txt"
|
431
435
|
end
|
432
436
|
|
433
|
-
it '
|
437
|
+
it 'gives the created time of the file' do
|
434
438
|
Timecop.freeze(@now) do
|
435
439
|
FileUtils.touch(File.expand_path(@path))
|
436
|
-
@maid.created_at(@path).
|
440
|
+
expect(@maid.created_at(@path)).to eq(Time.now)
|
437
441
|
end
|
438
442
|
end
|
439
443
|
end
|
440
444
|
|
441
445
|
describe '#accessed_at' do
|
442
446
|
# FakeFS does not implement atime.
|
443
|
-
it '
|
444
|
-
File.
|
445
|
-
@maid.accessed_at('~/foo.zip').
|
447
|
+
it 'gives the last accessed time of the file' do
|
448
|
+
expect(File).to receive(:atime).with("#@home/foo.zip").and_return(@now)
|
449
|
+
expect(@maid.accessed_at('~/foo.zip')).to eq(@now)
|
446
450
|
end
|
447
451
|
|
448
|
-
it '
|
449
|
-
File.
|
450
|
-
@maid.
|
451
|
-
@maid.last_accessed('~/foo.zip').
|
452
|
+
it 'triggers deprecation warning when last_accessed is used, but still run' do
|
453
|
+
expect(File).to receive(:atime).with("#@home/foo.zip").and_return(@now)
|
454
|
+
expect(@maid).to have_deprecated_method(:last_accessed)
|
455
|
+
expect(@maid.last_accessed('~/foo.zip')).to eq(@now)
|
452
456
|
end
|
453
457
|
end
|
454
458
|
|
@@ -458,13 +462,13 @@ module Maid
|
|
458
462
|
FileUtils.touch(File.expand_path(@path))
|
459
463
|
end
|
460
464
|
|
461
|
-
it '
|
465
|
+
it 'gives the modified time of the file' do
|
462
466
|
Timecop.freeze(@now) do
|
463
467
|
File.open(@path, 'w') { |f| f.write('Test') }
|
464
468
|
end
|
465
469
|
|
466
470
|
# use to_i to ignore milliseconds during test
|
467
|
-
@maid.modified_at(@path).to_i.
|
471
|
+
expect(@maid.modified_at(@path).to_i).to eq(@now.to_i)
|
468
472
|
end
|
469
473
|
end
|
470
474
|
|
@@ -473,9 +477,9 @@ module Maid
|
|
473
477
|
@file = '~/foo.zip'
|
474
478
|
end
|
475
479
|
|
476
|
-
it '
|
477
|
-
File.
|
478
|
-
@maid.size_of(@file).
|
480
|
+
it 'gives the size of the file' do
|
481
|
+
expect(File).to receive(:size).with(@file).and_return(42)
|
482
|
+
expect(@maid.size_of(@file)).to eq(42)
|
479
483
|
end
|
480
484
|
end
|
481
485
|
|
@@ -484,21 +488,21 @@ module Maid
|
|
484
488
|
@file = '~/test.txt'
|
485
489
|
end
|
486
490
|
|
487
|
-
it '
|
488
|
-
File.
|
489
|
-
@maid.checksum_of(@file).
|
491
|
+
it 'returns the checksum of the file' do
|
492
|
+
expect(File).to receive(:read).with(@file).and_return('contents')
|
493
|
+
expect(@maid.checksum_of(@file)).to eq(Digest::SHA1.hexdigest('contents'))
|
490
494
|
end
|
491
495
|
end
|
492
496
|
|
493
497
|
describe '#git_piston' do
|
494
498
|
it 'is deprecated' do
|
495
|
-
@maid.
|
499
|
+
expect(@maid).to have_deprecated_method(:git_piston)
|
496
500
|
@maid.git_piston('~/code/projectname')
|
497
501
|
end
|
498
502
|
|
499
|
-
it '
|
500
|
-
@maid.
|
501
|
-
@logger.
|
503
|
+
it 'ands pushes the given git repository, logging the action' do
|
504
|
+
expect(@maid).to receive(:cmd).with(%(cd #@home/code/projectname && git pull && git push 2>&1))
|
505
|
+
expect(@logger).to receive(:info)
|
502
506
|
@maid.git_piston('~/code/projectname')
|
503
507
|
end
|
504
508
|
end
|
@@ -509,36 +513,35 @@ module Maid
|
|
509
513
|
@dst_dir = '~/Reference'
|
510
514
|
end
|
511
515
|
|
512
|
-
it '
|
513
|
-
@maid.
|
516
|
+
it 'syncs the expanded paths, retaining backslash' do
|
517
|
+
expect(@maid).to receive(:cmd).with(%(rsync -a -u #@home/Downloads/ #@home/Reference 2>&1))
|
514
518
|
@maid.sync(@src_dir, @dst_dir)
|
515
519
|
end
|
516
520
|
|
517
|
-
it '
|
518
|
-
@logger.
|
521
|
+
it 'logs the action' do
|
522
|
+
expect(@logger).to receive(:info)
|
519
523
|
@maid.sync(@src_dir, @dst_dir)
|
520
524
|
end
|
521
525
|
|
522
|
-
it '
|
523
|
-
@maid.
|
526
|
+
it 'has no options' do
|
527
|
+
expect(@maid).to receive(:cmd).with(%(rsync #@home/Downloads/ #@home/Reference 2>&1))
|
524
528
|
@maid.sync(@src_dir, @dst_dir, :archive => false, :update => false)
|
525
529
|
end
|
526
530
|
|
527
|
-
it '
|
528
|
-
@maid.
|
531
|
+
it 'adds all options' do
|
532
|
+
expect(@maid).to receive(:cmd).with(%(rsync -a -v -u -m --exclude=.git --delete #@home/Downloads/ #@home/Reference 2>&1))
|
529
533
|
@maid.sync(@src_dir, @dst_dir, :archive => true, :update => true, :delete => true, :verbose => true, :prune_empty => true, :exclude => '.git')
|
530
534
|
end
|
531
535
|
|
532
|
-
it '
|
533
|
-
@maid.
|
534
|
-
should_receive(:cmd).
|
536
|
+
it 'adds multiple exlcude options' do
|
537
|
+
expect(@maid).to receive(:cmd).
|
535
538
|
with(%(rsync -a -u --exclude=.git --exclude=.rvmrc #@home/Downloads/ #@home/Reference 2>&1))
|
536
539
|
@maid.sync(@src_dir, @dst_dir, :exclude => ['.git', '.rvmrc'])
|
537
540
|
end
|
538
541
|
|
539
|
-
it '
|
542
|
+
it 'adds noop option' do
|
540
543
|
@maid.file_options[:noop] = true
|
541
|
-
@maid.
|
544
|
+
expect(@maid).to receive(:cmd).with(%(rsync -a -u -n #@home/Downloads/ #@home/Reference 2>&1))
|
542
545
|
@maid.sync(@src_dir, @dst_dir)
|
543
546
|
end
|
544
547
|
end
|
@@ -556,26 +559,26 @@ module Maid
|
|
556
559
|
end
|
557
560
|
|
558
561
|
describe '#dupes_in' do
|
559
|
-
it '
|
562
|
+
it 'lists duplicate files in arrays' do
|
560
563
|
dupes = @maid.dupes_in(file_fixtures_glob)
|
561
|
-
dupes.first.
|
564
|
+
expect(dupes.first).to be_kind_of(Array)
|
562
565
|
|
563
566
|
basenames = dupes.flatten.map { |p| File.basename(p) }
|
564
|
-
basenames.
|
567
|
+
expect(basenames).to eq(%w(1.zip bar.zip foo.zip))
|
565
568
|
end
|
566
569
|
end
|
567
570
|
|
568
571
|
describe '#verbose_dupes_in' do
|
569
|
-
it '
|
572
|
+
it 'lists all but the shortest-named dupe' do
|
570
573
|
dupes = @maid.verbose_dupes_in(file_fixtures_glob)
|
571
574
|
|
572
575
|
basenames = dupes.flatten.map { |p| File.basename(p) }
|
573
|
-
basenames.
|
576
|
+
expect(basenames).to eq(%w(bar.zip foo.zip))
|
574
577
|
end
|
575
578
|
end
|
576
579
|
|
577
580
|
describe '#newest_dupes_in' do
|
578
|
-
it '
|
581
|
+
it 'lists all but the oldest dupe' do
|
579
582
|
# FIXME: Broken on Ruby 2.1.0-preview2, maybe because of FakeFS
|
580
583
|
#
|
581
584
|
# oldest_path = "#{file_fixtures_path}/foo.zip"
|
@@ -587,20 +590,20 @@ module Maid
|
|
587
590
|
dupes = @maid.newest_dupes_in(file_fixtures_glob)
|
588
591
|
|
589
592
|
basenames = dupes.flatten.map { |p| File.basename(p) }
|
590
|
-
basenames.
|
593
|
+
expect(basenames).to eq(%w(bar.zip 1.zip))
|
591
594
|
end
|
592
595
|
end
|
593
596
|
|
594
597
|
describe '#mime_type' do
|
595
598
|
context 'given a JPEG image' do
|
596
599
|
it 'reports "image/jpeg"' do
|
597
|
-
@maid.mime_type(image_path).
|
600
|
+
expect(@maid.mime_type(image_path)).to eq('image/jpeg')
|
598
601
|
end
|
599
602
|
end
|
600
603
|
|
601
604
|
context 'given an unknown type' do
|
602
605
|
it 'returns nil' do
|
603
|
-
@maid.mime_type(unknown_path).
|
606
|
+
expect(@maid.mime_type(unknown_path)).to be_nil
|
604
607
|
end
|
605
608
|
end
|
606
609
|
end
|
@@ -608,13 +611,13 @@ module Maid
|
|
608
611
|
describe '#media_type' do
|
609
612
|
context 'given a JPEG image' do
|
610
613
|
it 'reports "image"' do
|
611
|
-
@maid.media_type(image_path).
|
614
|
+
expect(@maid.media_type(image_path)).to eq('image')
|
612
615
|
end
|
613
616
|
end
|
614
617
|
|
615
618
|
context 'given an unknown type' do
|
616
619
|
it 'returns nil' do
|
617
|
-
@maid.media_type(unknown_path).
|
620
|
+
expect(@maid.media_type(unknown_path)).to be_nil
|
618
621
|
end
|
619
622
|
end
|
620
623
|
end
|
@@ -624,8 +627,8 @@ module Maid
|
|
624
627
|
it 'only lists the fixture JPEG' do
|
625
628
|
matches = @maid.where_content_type(@maid.dir(file_fixtures_glob), 'image')
|
626
629
|
|
627
|
-
matches.length.
|
628
|
-
matches.first.
|
630
|
+
expect(matches.length).to eq(1)
|
631
|
+
expect(matches.first).to end_with('spec/fixtures/files/ruby.jpg')
|
629
632
|
end
|
630
633
|
end
|
631
634
|
end
|