mac_cleaner 1.0.1 → 1.2.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.
- checksums.yaml +4 -4
- data/README.md +8 -1
- data/lib/mac_cleaner/cleaner.rb +45 -2
- data/lib/mac_cleaner/cli.rb +17 -1
- data/lib/mac_cleaner/version.rb +1 -1
- metadata +5 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 67f838fa1f2e9d1fb2c4f346edf39c5910ee2d1bcb1c33c2e920f15ddc6b9c59
|
|
4
|
+
data.tar.gz: 41de30e4dff929ea9a0f74a7fc62200d926fe06c653aaed1543d88bc2d00986f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f2ba285c2335c2ce3747146cfb250f065b19a7d5a4c1212904b8d835681001bf7e30437a929b01b567af352d16fb00b84d83d4cc78c2ed457477a3d939febf87
|
|
7
|
+
data.tar.gz: 9e77581c83b491054d3e5c33e20b7cb4380d4b01d69c941762844e3257a6efcbde4a31a0c9a16fc1a919a8d7f6b5d230f8e8eed8e0f2b8ab85f8242538d2e87d
|
data/README.md
CHANGED
|
@@ -17,7 +17,7 @@ gem install mac_cleaner
|
|
|
17
17
|
### From the `.gem` file
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
gem install ./mac_cleaner-1.
|
|
20
|
+
gem install ./mac_cleaner-1.2.1.gem
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
### From the git repository
|
|
@@ -40,6 +40,13 @@ mac_cleaner clean
|
|
|
40
40
|
|
|
41
41
|
* `--dry-run`, `-n`: Perform a dry run without deleting files.
|
|
42
42
|
* `--sudo`: Run with sudo for system-level cleanup.
|
|
43
|
+
* `--interactive`, `-i`: Review each section and choose what to clean before anything runs.
|
|
44
|
+
|
|
45
|
+
### Check the current version
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
mac_cleaner --version
|
|
49
|
+
```
|
|
43
50
|
|
|
44
51
|
### Analyze disk space
|
|
45
52
|
|
data/lib/mac_cleaner/cleaner.rb
CHANGED
|
@@ -2,14 +2,27 @@ require 'fileutils'
|
|
|
2
2
|
|
|
3
3
|
module MacCleaner
|
|
4
4
|
class Cleaner
|
|
5
|
-
def initialize(dry_run: false, sudo: false)
|
|
5
|
+
def initialize(dry_run: false, sudo: false, interactive: false, input: $stdin)
|
|
6
6
|
@dry_run = dry_run
|
|
7
7
|
@sudo = sudo
|
|
8
|
+
@interactive = interactive
|
|
9
|
+
@input = input
|
|
8
10
|
@total_size_cleaned = 0
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
def clean
|
|
12
|
-
|
|
14
|
+
sections = if @interactive
|
|
15
|
+
interactive_section_selection(CLEANUP_SECTIONS)
|
|
16
|
+
else
|
|
17
|
+
CLEANUP_SECTIONS
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
if sections.empty?
|
|
21
|
+
puts "\nNo sections selected. Exiting."
|
|
22
|
+
return
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
sections.each do |section|
|
|
13
26
|
if section[:sudo] && !@sudo
|
|
14
27
|
puts "\nSkipping '#{section[:name]}' (requires sudo)"
|
|
15
28
|
next
|
|
@@ -67,6 +80,36 @@ module MacCleaner
|
|
|
67
80
|
# Skip paths we cannot access
|
|
68
81
|
end
|
|
69
82
|
|
|
83
|
+
def interactive_section_selection(sections)
|
|
84
|
+
puts "\nInteractive mode enabled. Review each section before cleaning."
|
|
85
|
+
sections.each_with_object([]) do |section, selected|
|
|
86
|
+
label = section[:sudo] ? "#{section[:name]} (requires sudo)" : section[:name]
|
|
87
|
+
puts "\n#{label}"
|
|
88
|
+
section[:targets].each do |target|
|
|
89
|
+
puts " - #{target[:name]}"
|
|
90
|
+
end
|
|
91
|
+
if confirm_selection?(section[:name])
|
|
92
|
+
selected << section
|
|
93
|
+
else
|
|
94
|
+
puts " Skipping '#{section[:name]}'"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def confirm_selection?(name)
|
|
100
|
+
print "Proceed with '#{name}'? [y/N]: "
|
|
101
|
+
$stdout.flush
|
|
102
|
+
response = @input.gets
|
|
103
|
+
return false unless response
|
|
104
|
+
|
|
105
|
+
case response.strip.downcase
|
|
106
|
+
when "y", "yes"
|
|
107
|
+
true
|
|
108
|
+
else
|
|
109
|
+
false
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
70
113
|
def get_size(path, sudo = false)
|
|
71
114
|
return 0 unless File.exist?(path)
|
|
72
115
|
return 0 unless File.readable?(path)
|
data/lib/mac_cleaner/cli.rb
CHANGED
|
@@ -4,19 +4,35 @@ module MacCleaner
|
|
|
4
4
|
class CLI < Thor
|
|
5
5
|
class_option :dry_run, type: :boolean, aliases: "-n", desc: "Perform a dry run without deleting files"
|
|
6
6
|
class_option :sudo, type: :boolean, desc: "Run with sudo for system-level cleanup"
|
|
7
|
+
class_option :interactive, type: :boolean, aliases: "-i", desc: "Interactively choose sections to clean before executing"
|
|
8
|
+
|
|
9
|
+
map %w[--version -v] => :version
|
|
7
10
|
|
|
8
11
|
desc "clean", "Clean up your Mac"
|
|
9
12
|
def clean
|
|
10
13
|
require_relative 'cleaner'
|
|
11
|
-
cleaner = MacCleaner::Cleaner.new(
|
|
14
|
+
cleaner = MacCleaner::Cleaner.new(
|
|
15
|
+
dry_run: options[:dry_run],
|
|
16
|
+
sudo: options[:sudo],
|
|
17
|
+
interactive: options[:interactive]
|
|
18
|
+
)
|
|
12
19
|
cleaner.clean
|
|
13
20
|
end
|
|
14
21
|
|
|
22
|
+
desc "version", "Print the mac_cleaner version"
|
|
23
|
+
def version
|
|
24
|
+
puts MacCleaner::VERSION
|
|
25
|
+
end
|
|
26
|
+
|
|
15
27
|
desc "analyze [PATH]", "Analyze disk space"
|
|
16
28
|
def analyze(path = "~")
|
|
17
29
|
require_relative 'analyzer'
|
|
18
30
|
analyzer = MacCleaner::Analyzer.new(path: path)
|
|
19
31
|
analyzer.analyze
|
|
20
32
|
end
|
|
33
|
+
|
|
34
|
+
def self.exit_on_failure?
|
|
35
|
+
false
|
|
36
|
+
end
|
|
21
37
|
end
|
|
22
38
|
end
|
data/lib/mac_cleaner/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mac_cleaner
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- ojisanchamchi
|
|
@@ -13,16 +13,16 @@ dependencies:
|
|
|
13
13
|
name: thor
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
|
-
- - "
|
|
16
|
+
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '0'
|
|
18
|
+
version: '1.0'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
|
-
- - "
|
|
23
|
+
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '0'
|
|
25
|
+
version: '1.0'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: bundler
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -88,7 +88,6 @@ homepage: https://github.com/ojisanchamchi/mac_cleaner
|
|
|
88
88
|
licenses:
|
|
89
89
|
- MIT
|
|
90
90
|
metadata:
|
|
91
|
-
homepage_uri: https://github.com/ojisanchamchi/mac_cleaner
|
|
92
91
|
source_code_uri: https://github.com/ojisanchamchi/mac_cleaner
|
|
93
92
|
changelog_uri: https://github.com/ojisanchamchi/mac_cleaner/blob/main/CHANGELOG.md
|
|
94
93
|
rdoc_options: []
|