maid 0.10.0 → 0.11.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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.commitlintrc.json +7 -0
  3. data/.github/FUNDING.yml +14 -0
  4. data/.github/workflows/{coverage.yml → coverage-upload.yml} +10 -8
  5. data/.github/workflows/lint.yml +41 -1
  6. data/.github/workflows/merge-gatekeeper.yml +20 -0
  7. data/.github/workflows/release.yml +31 -34
  8. data/.github/workflows/stale.yml +28 -0
  9. data/.github/workflows/test.yml +11 -8
  10. data/.gitignore +1 -1
  11. data/.releaserc.json +34 -0
  12. data/.rubocop.yml +3 -1
  13. data/.rubocop_todo.yml +105 -107
  14. data/.ruby-version +1 -1
  15. data/AUTHORS.md +1 -0
  16. data/CHANGELOG.md +23 -0
  17. data/CONTRIBUTING.md +15 -0
  18. data/Dockerfile +13 -0
  19. data/Gemfile.lock +230 -0
  20. data/Guardfile +2 -0
  21. data/README.md +82 -49
  22. data/Rakefile +9 -0
  23. data/fixtures/files/test_rules.rb +3 -0
  24. data/lib/maid/logger/logger.rb +63 -0
  25. data/lib/maid/maid.rb +6 -22
  26. data/lib/maid/repeat.rb +2 -2
  27. data/lib/maid/rule.rb +2 -2
  28. data/lib/maid/rule_container.rb +2 -2
  29. data/lib/maid/tools.rb +3 -3
  30. data/lib/maid/trash_migration.rb +2 -0
  31. data/lib/maid/version.rb +1 -1
  32. data/lib/maid/watch.rb +2 -2
  33. data/lib/maid.rb +3 -2
  34. data/maid.gemspec +18 -15
  35. data/script/docker-test +7 -0
  36. data/script/update-version.rb +14 -0
  37. data/spec/fakefs_helper.rb +13 -0
  38. data/spec/lib/maid/logger/logger_spec.rb +64 -0
  39. data/spec/lib/maid/maid_spec.rb +113 -103
  40. data/spec/lib/maid/rake/single_rule_spec.rb +1 -1
  41. data/spec/lib/maid/tools_spec.rb +383 -224
  42. data/spec/lib/maid/trash_migration_spec.rb +7 -5
  43. data/spec/spec_helper.rb +9 -1
  44. metadata +124 -49
  45. data/.release-please-manifest.json +0 -3
  46. data/Vagrantfile +0 -14
  47. data/script/vagrant-provision +0 -43
  48. data/script/vagrant-test +0 -7
  49. data/script/vagrant-test-all +0 -34
@@ -3,7 +3,13 @@ require 'fileutils'
3
3
  require 'spec_helper'
4
4
 
5
5
  module Maid
6
- describe TrashMigration, fakefs: true do
6
+ describe TrashMigration, :fakefs do
7
+ before do
8
+ # Avoid FakeFS' File#flock NotImplementedError
9
+ FileUtils.mkdir_p(File.dirname(Maid::DEFAULTS[:log_device]))
10
+ FileUtils.touch(Maid::DEFAULTS[:log_device])
11
+ end
12
+
7
13
  context 'when running on Linux' do
8
14
  before do
9
15
  allow(Platform).to receive(:linux?).and_return(true)
@@ -47,10 +53,6 @@ module Maid
47
53
  end
48
54
 
49
55
  describe 'performing' do
50
- before do
51
- allow(Logger).to receive(:new).and_return(double('Logger').as_null_object)
52
- end
53
-
54
56
  context 'in Linux' do
55
57
  let(:filename) { 'foo.txt' }
56
58
  let(:trash_contents) do
data/spec/spec_helper.rb CHANGED
@@ -20,6 +20,14 @@ require 'vcr'
20
20
 
21
21
  require 'maid'
22
22
 
23
+ # Prevent running RSpec unless it's running in Vagrant or Docker, to avoid
24
+ # overwriting files on the live filesystem through the tests.
25
+ unless ENV['ISOLATED']
26
+ raise "It's safer to run the tests within a Docker container or a Vagrant box.
27
+ See https://github.com/maid/maid/wiki/Contributing. To run anyway, set the
28
+ environment variable `ISOLATED` to `true`"
29
+ end
30
+
23
31
  RSpec.configure do |config|
24
32
  config.mock_with(:rspec) do |mocks|
25
33
  mocks.allow_message_expectations_on_nil = false
@@ -33,7 +41,7 @@ RSpec.configure do |config|
33
41
  # NOTE: If a test fails because ENOENT /usr/share/zoneinfo/Africa/Abidjan,
34
42
  # add `fake_zoneinfo: true` to the describe:
35
43
  # `describe(MyClass, fake_zoneinfo: true do`
36
- config.before(:context, fake_zoneinfo: true) do
44
+ config.before(:context, :fake_zoneinfo) do
37
45
  # Rufus needs zoneinfo data to run, but when using FakeFS,
38
46
  # /usr/share/zoneinfo doesn't exist on the FakeFS.
39
47
  # On Linux, we just have to FakeFS::FileSystem.clone the directory and it
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Oakes
8
8
  - Coaxial
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2023-05-01 00:00:00.000000000 Z
11
+ date: 2025-08-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: deprecated
@@ -161,14 +160,14 @@ dependencies:
161
160
  requirements:
162
161
  - - "~>"
163
162
  - !ruby/object:Gem::Version
164
- version: 1.2.1
163
+ version: 1.4.0
165
164
  type: :runtime
166
165
  prerelease: false
167
166
  version_requirements: !ruby/object:Gem::Requirement
168
167
  requirements:
169
168
  - - "~>"
170
169
  - !ruby/object:Gem::Version
171
- version: 1.2.1
170
+ version: 1.4.0
172
171
  - !ruby/object:Gem::Dependency
173
172
  name: xdg
174
173
  requirement: !ruby/object:Gem::Requirement
@@ -183,6 +182,20 @@ dependencies:
183
182
  - - "~>"
184
183
  - !ruby/object:Gem::Version
185
184
  version: 2.2.3
185
+ - !ruby/object:Gem::Dependency
186
+ name: conventional-changelog
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: 1.3.0
192
+ type: :development
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: 1.3.0
186
199
  - !ruby/object:Gem::Dependency
187
200
  name: fakefs
188
201
  requirement: !ruby/object:Gem::Requirement
@@ -201,16 +214,16 @@ dependencies:
201
214
  name: fuubar
202
215
  requirement: !ruby/object:Gem::Requirement
203
216
  requirements:
204
- - - ">="
217
+ - - "~>"
205
218
  - !ruby/object:Gem::Version
206
- version: '0'
219
+ version: 2.5.1
207
220
  type: :development
208
221
  prerelease: false
209
222
  version_requirements: !ruby/object:Gem::Requirement
210
223
  requirements:
211
- - - ">="
224
+ - - "~>"
212
225
  - !ruby/object:Gem::Version
213
- version: '0'
226
+ version: 2.5.1
214
227
  - !ruby/object:Gem::Dependency
215
228
  name: guard
216
229
  requirement: !ruby/object:Gem::Requirement
@@ -257,30 +270,58 @@ dependencies:
257
270
  name: guard-rubocop
258
271
  requirement: !ruby/object:Gem::Requirement
259
272
  requirements:
260
- - - ">="
273
+ - - "~>"
261
274
  - !ruby/object:Gem::Version
262
- version: '0'
275
+ version: 1.5.0
263
276
  type: :development
264
277
  prerelease: false
265
278
  version_requirements: !ruby/object:Gem::Requirement
266
279
  requirements:
267
- - - ">="
280
+ - - "~>"
268
281
  - !ruby/object:Gem::Version
269
- version: '0'
282
+ version: 1.5.0
283
+ - !ruby/object:Gem::Dependency
284
+ name: irb
285
+ requirement: !ruby/object:Gem::Requirement
286
+ requirements:
287
+ - - "~>"
288
+ - !ruby/object:Gem::Version
289
+ version: 1.15.1
290
+ type: :development
291
+ prerelease: false
292
+ version_requirements: !ruby/object:Gem::Requirement
293
+ requirements:
294
+ - - "~>"
295
+ - !ruby/object:Gem::Version
296
+ version: 1.15.1
297
+ - !ruby/object:Gem::Dependency
298
+ name: ostruct
299
+ requirement: !ruby/object:Gem::Requirement
300
+ requirements:
301
+ - - "~>"
302
+ - !ruby/object:Gem::Version
303
+ version: 0.6.1
304
+ type: :development
305
+ prerelease: false
306
+ version_requirements: !ruby/object:Gem::Requirement
307
+ requirements:
308
+ - - "~>"
309
+ - !ruby/object:Gem::Version
310
+ version: 0.6.1
270
311
  - !ruby/object:Gem::Dependency
271
312
  name: pry-byebug
272
313
  requirement: !ruby/object:Gem::Requirement
273
314
  requirements:
274
- - - ">="
315
+ - - "~>"
275
316
  - !ruby/object:Gem::Version
276
- version: '0'
317
+ version: 3.10.1
277
318
  type: :development
278
319
  prerelease: false
279
320
  version_requirements: !ruby/object:Gem::Requirement
280
321
  requirements:
281
- - - ">="
322
+ - - "~>"
282
323
  - !ruby/object:Gem::Version
283
- version: '0'
324
+ version: 3.10.1
284
325
  - !ruby/object:Gem::Dependency
285
326
  name: rake
286
327
  requirement: !ruby/object:Gem::Requirement
@@ -299,16 +340,16 @@ dependencies:
299
340
  name: rake-notes
300
341
  requirement: !ruby/object:Gem::Requirement
301
342
  requirements:
302
- - - ">="
343
+ - - "~>"
303
344
  - !ruby/object:Gem::Version
304
- version: '0'
345
+ version: 0.2.2
305
346
  type: :development
306
347
  prerelease: false
307
348
  version_requirements: !ruby/object:Gem::Requirement
308
349
  requirements:
309
- - - ">="
350
+ - - "~>"
310
351
  - !ruby/object:Gem::Version
311
- version: '0'
352
+ version: 0.2.2
312
353
  - !ruby/object:Gem::Dependency
313
354
  name: redcarpet
314
355
  requirement: !ruby/object:Gem::Requirement
@@ -323,6 +364,20 @@ dependencies:
323
364
  - - "~>"
324
365
  - !ruby/object:Gem::Version
325
366
  version: 3.6.0
367
+ - !ruby/object:Gem::Dependency
368
+ name: reline
369
+ requirement: !ruby/object:Gem::Requirement
370
+ requirements:
371
+ - - "~>"
372
+ - !ruby/object:Gem::Version
373
+ version: 0.6.0
374
+ type: :development
375
+ prerelease: false
376
+ version_requirements: !ruby/object:Gem::Requirement
377
+ requirements:
378
+ - - "~>"
379
+ - !ruby/object:Gem::Version
380
+ version: 0.6.0
326
381
  - !ruby/object:Gem::Dependency
327
382
  name: rspec
328
383
  requirement: !ruby/object:Gem::Requirement
@@ -341,58 +396,72 @@ dependencies:
341
396
  name: rubocop
342
397
  requirement: !ruby/object:Gem::Requirement
343
398
  requirements:
344
- - - ">="
399
+ - - "~>"
345
400
  - !ruby/object:Gem::Version
346
- version: '0'
401
+ version: '1.50'
347
402
  type: :development
348
403
  prerelease: false
349
404
  version_requirements: !ruby/object:Gem::Requirement
350
405
  requirements:
351
- - - ">="
406
+ - - "~>"
352
407
  - !ruby/object:Gem::Version
353
- version: '0'
408
+ version: '1.50'
354
409
  - !ruby/object:Gem::Dependency
355
410
  name: rubocop-rake
356
411
  requirement: !ruby/object:Gem::Requirement
357
412
  requirements:
358
- - - ">="
413
+ - - "~>"
359
414
  - !ruby/object:Gem::Version
360
- version: '0'
415
+ version: 0.6.0
361
416
  type: :development
362
417
  prerelease: false
363
418
  version_requirements: !ruby/object:Gem::Requirement
364
419
  requirements:
365
- - - ">="
420
+ - - "~>"
366
421
  - !ruby/object:Gem::Version
367
- version: '0'
422
+ version: 0.6.0
368
423
  - !ruby/object:Gem::Dependency
369
424
  name: rubocop-rspec
370
425
  requirement: !ruby/object:Gem::Requirement
371
426
  requirements:
372
- - - ">="
427
+ - - "~>"
373
428
  - !ruby/object:Gem::Version
374
- version: '0'
429
+ version: 3.5.0
375
430
  type: :development
376
431
  prerelease: false
377
432
  version_requirements: !ruby/object:Gem::Requirement
378
433
  requirements:
379
- - - ">="
434
+ - - "~>"
435
+ - !ruby/object:Gem::Version
436
+ version: 3.5.0
437
+ - !ruby/object:Gem::Dependency
438
+ name: semantic_release
439
+ requirement: !ruby/object:Gem::Requirement
440
+ requirements:
441
+ - - "~>"
442
+ - !ruby/object:Gem::Version
443
+ version: 1.0.0
444
+ type: :development
445
+ prerelease: false
446
+ version_requirements: !ruby/object:Gem::Requirement
447
+ requirements:
448
+ - - "~>"
380
449
  - !ruby/object:Gem::Version
381
- version: '0'
450
+ version: 1.0.0
382
451
  - !ruby/object:Gem::Dependency
383
452
  name: simplecov
384
453
  requirement: !ruby/object:Gem::Requirement
385
454
  requirements:
386
- - - ">="
455
+ - - "~>"
387
456
  - !ruby/object:Gem::Version
388
- version: '0'
457
+ version: 0.22.0
389
458
  type: :development
390
459
  prerelease: false
391
460
  version_requirements: !ruby/object:Gem::Requirement
392
461
  requirements:
393
- - - ">="
462
+ - - "~>"
394
463
  - !ruby/object:Gem::Version
395
- version: '0'
464
+ version: 0.22.0
396
465
  - !ruby/object:Gem::Dependency
397
466
  name: timecop
398
467
  requirement: !ruby/object:Gem::Requirement
@@ -489,14 +558,18 @@ extra_rdoc_files: []
489
558
  files:
490
559
  - ".act-env"
491
560
  - ".act-secrets.example"
561
+ - ".commitlintrc.json"
562
+ - ".github/FUNDING.yml"
492
563
  - ".github/ISSUE_TEMPLATE/bug_report.md"
493
564
  - ".github/ISSUE_TEMPLATE/feature_request.md"
494
- - ".github/workflows/coverage.yml"
565
+ - ".github/workflows/coverage-upload.yml"
495
566
  - ".github/workflows/lint.yml"
567
+ - ".github/workflows/merge-gatekeeper.yml"
496
568
  - ".github/workflows/release.yml"
569
+ - ".github/workflows/stale.yml"
497
570
  - ".github/workflows/test.yml"
498
571
  - ".gitignore"
499
- - ".release-please-manifest.json"
572
+ - ".releaserc.json"
500
573
  - ".rspec"
501
574
  - ".rubocop.yml"
502
575
  - ".rubocop_todo.yml"
@@ -507,19 +580,22 @@ files:
507
580
  - CHANGELOG.md
508
581
  - CONTRIBUTING.md
509
582
  - ChangeLog
583
+ - Dockerfile
510
584
  - Gemfile
585
+ - Gemfile.lock
511
586
  - Guardfile
512
587
  - LICENSE
513
588
  - README.md
514
589
  - Rakefile
515
590
  - SECURITY.md
516
- - Vagrantfile
517
591
  - bin/maid
592
+ - fixtures/files/test_rules.rb
518
593
  - fixtures/vcr_cassettes/Dependency_expectations/Geocoder/translates_latitude_and_longitude_into_street_addresses.yml
519
594
  - fixtures/vcr_cassettes/Maid_Tools/_location_city/given_a_JPEG_image/reports_the_known_location.yml
520
595
  - lib/maid.rb
521
596
  - lib/maid/app.rb
522
597
  - lib/maid/downloading.rb
598
+ - lib/maid/logger/logger.rb
523
599
  - lib/maid/maid.rb
524
600
  - lib/maid/numeric_extensions.rb
525
601
  - lib/maid/platform.rb
@@ -539,11 +615,11 @@ files:
539
615
  - resources/download-for-ubuntu.png
540
616
  - resources/hacker-news.png
541
617
  - resources/ruby5.gif
618
+ - script/docker-test
542
619
  - script/smoke-test
543
- - script/vagrant-provision
544
- - script/vagrant-test
545
- - script/vagrant-test-all
620
+ - script/update-version.rb
546
621
  - spec/dependency_spec.rb
622
+ - spec/fakefs_helper.rb
547
623
  - spec/fixtures/files/1.zip
548
624
  - spec/fixtures/files/bar.zip
549
625
  - spec/fixtures/files/foo.zip
@@ -552,6 +628,7 @@ files:
552
628
  - spec/fixtures/files/unknown.foo
553
629
  - spec/fixtures/files/さ.zip
554
630
  - spec/lib/maid/app_spec.rb
631
+ - spec/lib/maid/logger/logger_spec.rb
555
632
  - spec/lib/maid/maid_spec.rb
556
633
  - spec/lib/maid/numeric_extensions_spec.rb
557
634
  - spec/lib/maid/platform_spec.rb
@@ -565,7 +642,7 @@ files:
565
642
  - spec/spec_helper.rb
566
643
  homepage: http://github.com/maid/maid
567
644
  licenses:
568
- - GPL-2.0
645
+ - GPL-2.0-only
569
646
  metadata:
570
647
  bug_tracker_uri: https://github.com/maid/maid/issues
571
648
  changelog_uri: https://github.com/maid/maid/blob/master/CHANGELOG.md
@@ -582,16 +659,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
582
659
  requirements:
583
660
  - - ">="
584
661
  - !ruby/object:Gem::Version
585
- version: 2.7.0
662
+ version: 3.2.0
586
663
  required_rubygems_version: !ruby/object:Gem::Requirement
587
664
  requirements:
588
665
  - - ">="
589
666
  - !ruby/object:Gem::Version
590
667
  version: '0'
591
668
  requirements: []
592
- rubygems_version: 3.4.6
593
- signing_key:
669
+ rubygems_version: 3.6.2
594
670
  specification_version: 4
595
- summary: Be lazy. Let Maid clean up after you, based on rules you define. Think of
596
- it as "Hazel for hackers".
671
+ summary: Keep your filesystem clean by running custom rules periodically
597
672
  test_files: []
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.10.0"
3
- }
data/Vagrantfile DELETED
@@ -1,14 +0,0 @@
1
- # -*- mode: ruby -*-
2
- # vi: set ft=ruby :
3
-
4
- Vagrant.configure('2') do |config|
5
- # See also: `script/vagrant-test`, `script/vagrant-test-all`
6
- config.vm.box = ENV['MAID_TARGET_BOX'] || 'hashicorp/precise64'
7
-
8
- config.vm.provider :virtualbox do |vb|
9
- # Maid has very low system requirements
10
- vb.customize ['modifyvm', :id, '--cpus', 1, '--memory', 192]
11
- end
12
-
13
- config.vm.provision(:shell, path: 'script/vagrant-provision', args: ENV['MAID_TARGET_RUBY'] || '1.9.3')
14
- end
@@ -1,43 +0,0 @@
1
- #!/usr/bin/env bash
2
- # A simple shell-based provisioner for Vagrant.
3
- #
4
- # Documentation: [Shell Provisioner](http://vagrantup.com/v1/docs/provisioners/shell.html)
5
- set -o errexit
6
-
7
- # Set to '1.9.3', 'jruby'
8
- target_ruby_version="${1:-1.9.3}"
9
-
10
- # Install the given package, no questions asked.
11
- function install-pkg {
12
- sudo apt-get install -y "$1"
13
- }
14
-
15
- # Only install the given package if targeting the given Ruby version.
16
- function install-pkg-if-ruby {
17
- local ruby_version="$1"
18
- local package="$2"
19
-
20
- if [ "$target_ruby_version" == "$ruby_version" ]; then
21
- install-pkg "$package"
22
- fi
23
- }
24
-
25
- sudo apt-get update
26
-
27
- # ## Dependencies
28
- # Installs `ruby 1.9.3p0`
29
- install-pkg-if-ruby '1.9.3' 'ruby1.9.1'
30
- install-pkg-if-ruby 'jruby' 'jruby'
31
-
32
- # ## Development dependencies
33
- #
34
- # For building `maid-x.y.z.gem`
35
- install-pkg 'git-core'
36
- # For building `ffi` for `guard`'s soft dependency on `rb-inotify`
37
- install-pkg 'make'
38
- install-pkg 'libffi-dev'
39
- install-pkg-if-ruby '1.9.3' 'ruby1.9.1-dev'
40
-
41
- sudo gem install bundler
42
- cd /vagrant
43
- bundle install
data/script/vagrant-test DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Run tests on a newly created Vagrant box.
3
- set -o errexit
4
-
5
- vagrant destroy --force
6
- vagrant up
7
- vagrant ssh --command 'cd /vagrant && rake && sudo rake install && script/smoke-test'
@@ -1,34 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Test all officially supported Ubuntu versions.
3
- #
4
- # See also: `Vagrantfile`
5
-
6
- # ## Base Boxes
7
- #
8
- # To add a [box](http://vagrantup.com/v1/docs/boxes.html):
9
- #
10
- # vagrant box add $box_name $box_url
11
- #
12
- # Base boxes for supported releases are listed below. The idea is to come close to the [official Canonical support timeline](http://en.wikipedia.org/wiki/Ubuntu_releases#Table_of_versions), when possible.
13
- #
14
- # ### Releases preferred with Ruby 1.9.3
15
- #
16
- # Supported until 2017-04:
17
- #
18
- # * `precise32`: http://files.vagrantup.com/precise32.box
19
- # * `precise64`: http://files.vagrantup.com/precise64.box
20
- #
21
- # Supported until 2014-07:
22
- #
23
- # * `saucy32`
24
- # * `saucy64`
25
- #
26
- # ## See Also
27
- #
28
- # * [Vagrant Boxes List](http://www.vagrantbox.es/)
29
- # * [Contributing Guide](https://github.com/benjaminoakes/maid/wiki/Contributing)
30
-
31
- MAID_TARGET_BOX='hashicorp/precise32' MAID_TARGET_RUBY='1.9.3' script/vagrant-test
32
- MAID_TARGET_BOX='hashicorp/precise64' MAID_TARGET_RUBY='1.9.3' script/vagrant-test
33
- # TODO: Locate and add box for `saucy32`
34
- # TODO: Locate and add box for `saucy64`