mac_cleaner 1.0.1 → 1.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 798e1fb145bf3e42e1dbdd3f0ff730ef8791c39319da30dd71e934bfb4bd63e3
4
- data.tar.gz: 0e157805a9d9597173f17bafd3954c807869d41d13bc4b8c66db14cac38bb176
3
+ metadata.gz: 6f90c5f76ccebcfdef050da44c646bafe5bdb33915204440404a7966f0dd8a9a
4
+ data.tar.gz: ee9f1cf39c205442f319bde3c03f83ca8b434068b8b311dc734e7fb670e15681
5
5
  SHA512:
6
- metadata.gz: ead2932fe815b080bee1190c31bb1319a492d3b1ea044ac1cdbe455a08c78736019ce0b225212051c812b9a0160b4a324f9c039aefffe0c03b5e4205a9599309
7
- data.tar.gz: 45f114b1dd0045852e30237e301797d9ba0cbd8a630d9a05f3318cdb24a653f214abefc7108992715695c8adc6d39f46d7adb5f1ae4fe05460f8a7857c04b56d
6
+ metadata.gz: 1fb963de26afbd1a18bd2cbe6a4b8f77e2675600e5a4c6e152b6d7bc08d6115020bfc77bd0cf2568390bba4a3e9622949789c2d0a00d196e120ecde375f07dcc
7
+ data.tar.gz: 4dee9666494fe8c9d20619bead848d4a3d561b88a607a4a10339802a6115872a9ae90919dd1746946927de5372731323ce6d14c7a1412238485d277288b20c9e
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.0.0.gem
20
+ gem install ./mac_cleaner-1.2.0.gem
21
21
  ```
22
22
 
23
23
  ### From the git repository
@@ -40,6 +40,7 @@ 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.
43
44
 
44
45
  ### Analyze disk space
45
46
 
@@ -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
- CLEANUP_SECTIONS.each do |section|
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)
@@ -4,11 +4,16 @@ 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"
7
8
 
8
9
  desc "clean", "Clean up your Mac"
9
10
  def clean
10
11
  require_relative 'cleaner'
11
- cleaner = MacCleaner::Cleaner.new(dry_run: options[:dry_run], sudo: options[:sudo])
12
+ cleaner = MacCleaner::Cleaner.new(
13
+ dry_run: options[:dry_run],
14
+ sudo: options[:sudo],
15
+ interactive: options[:interactive]
16
+ )
12
17
  cleaner.clean
13
18
  end
14
19
 
@@ -1,3 +1,3 @@
1
1
  module MacCleaner
2
- VERSION = "1.0.1"
2
+ VERSION = "1.2.0"
3
3
  end
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.0.1
4
+ version: 1.2.0
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: []