tidy-file-organizer 1.0.1 → 1.0.2

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: 64666de0b28d39f73adc6636bdf9e96ab358e803585242df908fa3993ec7fce9
4
- data.tar.gz: 5d7fd61c215b05a4fde8c27e0eeae9b85ba06792c3e6d4649df6980ffa9a94ca
3
+ metadata.gz: 5d8f46b93af807cefb8248c0b38ffda44f8733726bcccd54d2b769f7a4bd708a
4
+ data.tar.gz: c07701d4d8396d537f18ed6db6512c38a16e55d0790efabb064e0227b726fae0
5
5
  SHA512:
6
- metadata.gz: a53e6db2f0ffa3f7b7c78054515f06b48050d92f05bdc227f3a2ec6fd34bd91addc0f4411dd85124dcc1ff0b9f33ad88bdb6888deebb205d3c2cc5586eecbe14
7
- data.tar.gz: 346d0db207a564d6b40a1a685d23566ff061282461a4759231be22712d2f6ef7b6539304fce84f1203914cc6a3e431a8287255f2d8c6faf050642710f167cbfa
6
+ metadata.gz: 2b813dc8abe2411158718576bbb30f2c05563bd1c1c966fac1314c06c0cd21edc329c25718e627e0b27b68d22ee7ac5e39f4129598c44e9055204192f51de3b0
7
+ data.tar.gz: 20227b186a766087cc8a3f1db71c3be64b3db51bd66739dd087161eca87d1dc7637c8f6d60d29ca61142b3f52f3767dd498a7f3d69f439174541a300ef2423cb
data/.rubocop.yml CHANGED
@@ -10,7 +10,7 @@ plugins:
10
10
  # Project-specific overrides
11
11
 
12
12
  Metrics/ClassLength:
13
- Max: 170
13
+ Max: 200
14
14
 
15
15
  RSpec/MultipleExpectations:
16
16
  Max: 10
data/CLAUDE.md CHANGED
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
4
4
 
5
5
  ## Project Overview
6
6
 
7
- A Ruby CLI tool that organizes files based on extensions, keywords, and dates. The tool supports internationalization (English/Japanese) based on the `LANG` environment variable and stores per-directory configurations using MD5 hashes.
7
+ A Ruby CLI tool that organizes files based on extensions, keywords, regex patterns, and dates. The tool supports internationalization (English/Japanese) based on the `LANG` environment variable and stores per-directory configurations using MD5 hashes.
8
8
 
9
9
  ## Development Commands
10
10
 
@@ -60,9 +60,10 @@ ruby -I lib ./exe/tidyify run spec/data/ja --recursive
60
60
  - `organize-by-date`, `find-duplicates`, `remove-duplicates`: Directory is required
61
61
  - Options are parsed by checking for flags like `--dry-run`, `--recursive`/`-r`, `--pattern=<value>`, `--no-confirm`
62
62
 
63
- - **Organizer** (`lib/tidy_file_organizer/organizer.rb`): Main orchestrator for file organization. Implements two-level priority system:
64
- 1. Keyword matching (higher priority) - matches keywords anywhere in filename
65
- 2. Extension matching (lower priority) - matches file extensions
63
+ - **Organizer** (`lib/tidy_file_organizer/organizer.rb`): Main orchestrator for file organization. Implements three-level priority system:
64
+ 1. Pattern matching (highest priority) - matches regex patterns in filename
65
+ 2. Keyword matching (high priority) - matches keywords anywhere in filename
66
+ 3. Extension matching (normal priority) - matches file extensions
66
67
 
67
68
  - **Config** (`lib/tidy_file_organizer/config.rb`): Manages per-directory configuration using MD5 hash of directory path. Stores configs in `~/.config/tidy-file-organizer/[MD5hash].yml`. Supports default config references to avoid duplication.
68
69
 
@@ -95,11 +96,30 @@ Default configurations are sourced from `config/default.yml` and `config/default
95
96
  ```yaml
96
97
  language: en # or 'ja'
97
98
  extensions:
98
- Images: [jpg, jpeg, png, gif, bmp, svg, webp]
99
+ Images: [jpg, jpeg, png, gif, bmp, svg, webp, heic, heif, tiff, avif, ico, raw]
99
100
  Documents: [pdf, doc, docx, txt, md]
101
+ Databases: [db, sqlite, sqlite3, sql]
102
+ Fonts: [ttf, otf, woff, woff2]
103
+ eBooks: [epub, mobi, azw]
104
+ Logs: [log, out, err]
105
+ Data: [csv, tsv, parquet]
100
106
  keywords:
101
107
  Screenshots: [screenshot, スクリーンショット, スクショ]
102
108
  Invoices: [invoice, 請求書]
109
+ Receipts: [receipt, 領収書, レシート]
110
+ Reports: [report, 報告書, レポート]
111
+ Templates: [template, テンプレート, sample]
112
+ patterns:
113
+ ByDate:
114
+ - pattern: '\d{4}-\d{2}-\d{2}'
115
+ description: 'Date format: 2024-01-15'
116
+ - pattern: '\d{8}'
117
+ description: 'Date format: 20240115'
118
+ Versions:
119
+ - pattern: 'v\d+\.\d+\.\d+'
120
+ description: 'Semantic version: v1.0.0'
121
+ - pattern: '_v\d+'
122
+ description: 'Version suffix: file_v2'
103
123
  ```
104
124
 
105
125
  **Interactive Setup Input Format**: `extensions,list:directory keyword,list:directory`
@@ -117,17 +137,30 @@ keywords:
117
137
  ### File Organization Priority
118
138
 
119
139
  When running `tidyify run`:
120
- 1. **Keyword matching** is checked first (entire filename)
121
- 2. **Extension matching** is checked second (file extension only)
122
- 3. Files matching neither are skipped
123
- 4. Organized directories are excluded from processing to prevent reorganizing already-organized files
140
+ 1. **Pattern matching** is checked first (regex patterns in filename) - highest priority
141
+ 2. **Keyword matching** is checked second (entire filename) - high priority
142
+ 3. **Extension matching** is checked third (file extension only) - normal priority
143
+ 4. Files matching none of the above are skipped
144
+ 5. Organized directories are excluded from processing to prevent reorganizing already-organized files
145
+
146
+ **Priority Example**:
147
+ - File: `invoice_2024-01-15.pdf`
148
+ - Pattern match: `\d{4}-\d{2}-\d{2}` → Goes to `ByDate/` folder
149
+ - Even though "invoice" keyword exists, pattern takes precedence
124
150
 
125
151
  **Exclusion Mechanism**:
126
- - `Organizer#extract_organized_dirs` collects all directory names from config (both extensions and keywords)
152
+ - `Organizer#extract_organized_dirs` collects all directory names from config (extensions, keywords, and patterns)
127
153
  - In recursive mode, `FileHelper#excluded_path?` checks if any part of the file's relative path matches an organized directory name
128
154
  - This prevents files like `images/photo.jpg` from being re-organized into `images/images/photo.jpg`
129
155
  - Empty directories are automatically cleaned up after recursive organization (excluding the target directory and organized directories)
130
156
 
157
+ **Pattern Matching Details**:
158
+ - Patterns are defined as Ruby regular expressions in the config file
159
+ - Each pattern category can have multiple regex patterns
160
+ - Patterns are matched against the full filename (including extension)
161
+ - Invalid regex patterns are skipped with a warning message
162
+ - Pattern matching supports both string keys ('pattern') and symbol keys (:pattern) for flexibility
163
+
131
164
  ## Code Style
132
165
 
133
166
  This project follows [Cookpad's Ruby Style Guide](https://github.com/cookpad/styleguide) via `.rubocop.cookpad-styleguide.yml` with project-specific overrides in `.rubocop.yml`.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tidy-file-organizer (1.0.1)
4
+ tidy-file-organizer (1.0.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -65,10 +65,10 @@ PLATFORMS
65
65
 
66
66
  DEPENDENCIES
67
67
  rake (~> 13.0)
68
- rspec (~> 3.0, >= 0)
69
- rubocop (~> 1.0, >= 0)
70
- rubocop-performance (~> 1.0, >= 0)
71
- rubocop-rspec (~> 3.0, >= 0)
68
+ rspec
69
+ rubocop
70
+ rubocop-performance
71
+ rubocop-rspec
72
72
  tidy-file-organizer!
73
73
 
74
74
  CHECKSUMS
@@ -94,9 +94,9 @@ CHECKSUMS
94
94
  rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
95
95
  rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
96
96
  ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
97
- tidy-file-organizer (1.0.1)
97
+ tidy-file-organizer (1.0.2)
98
98
  unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
99
99
  unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
100
100
 
101
101
  BUNDLED WITH
102
- 4.0.1
102
+ 2.5.23
@@ -15,6 +15,15 @@
15
15
  - bmp
16
16
  - svg
17
17
  - webp
18
+ - heic
19
+ - heif
20
+ - tiff
21
+ - tif
22
+ - avif
23
+ - ico
24
+ - raw
25
+ - cr2
26
+ - nef
18
27
  動画:
19
28
  - mp4
20
29
  - mov
@@ -22,12 +31,21 @@
22
31
  - mkv
23
32
  - flv
24
33
  - wmv
34
+ - webm
35
+ - m4v
36
+ - 3gp
37
+ - ogv
25
38
  音声:
26
39
  - mp3
27
40
  - wav
28
41
  - flac
29
42
  - aac
30
43
  - m4a
44
+ - ogg
45
+ - opus
46
+ - wma
47
+ - midi
48
+ - mid
31
49
  書類:
32
50
  - pdf
33
51
  - doc
@@ -48,6 +66,17 @@
48
66
  - c
49
67
  - go
50
68
  - rs
69
+ - sh
70
+ - bash
71
+ - zsh
72
+ - fish
73
+ - ps1
74
+ - r
75
+ - swift
76
+ - kt
77
+ - scala
78
+ - clj
79
+ - lua
51
80
  ウェブ:
52
81
  - html
53
82
  - css
@@ -69,6 +98,34 @@
69
98
  - toml
70
99
  - xml
71
100
  - ini
101
+ データベース:
102
+ - db
103
+ - sqlite
104
+ - sqlite3
105
+ - sql
106
+ - mdb
107
+ - accdb
108
+ フォント:
109
+ - ttf
110
+ - otf
111
+ - woff
112
+ - woff2
113
+ - eot
114
+ 電子書籍:
115
+ - epub
116
+ - mobi
117
+ - azw
118
+ - azw3
119
+ - fb2
120
+ ログ:
121
+ - log
122
+ - out
123
+ - err
124
+ データ:
125
+ - csv
126
+ - tsv
127
+ - parquet
128
+ - arrow
72
129
  :keywords:
73
130
  スクリーンショット:
74
131
  - screenshot
@@ -90,3 +147,58 @@
90
147
  - backup
91
148
  - バックアップ
92
149
  - bak
150
+ 領収書:
151
+ - receipt
152
+ - 領収書
153
+ - レシート
154
+ 報告書:
155
+ - report
156
+ - 報告書
157
+ - レポート
158
+ - 報告
159
+ 提案書:
160
+ - proposal
161
+ - 提案書
162
+ - 提案
163
+ - 企画書
164
+ プレゼン資料:
165
+ - presentation
166
+ - slide
167
+ - deck
168
+ - プレゼン
169
+ - 資料
170
+ - スライド
171
+ テンプレート:
172
+ - template
173
+ - テンプレート
174
+ - sample
175
+ - サンプル
176
+ - boilerplate
177
+ 下書き:
178
+ - draft
179
+ - 草案
180
+ - 下書き
181
+ - wip
182
+ - temp
183
+ - tmp
184
+ メモ:
185
+ - note
186
+ - memo
187
+ - メモ
188
+ - ノート
189
+ - 覚書
190
+ :patterns:
191
+ 日付:
192
+ - pattern: '\d{4}-\d{2}-\d{2}'
193
+ description: '日付形式: 2024-01-15'
194
+ - pattern: '\d{4}_\d{2}_\d{2}'
195
+ description: '日付形式: 2024_01_15'
196
+ - pattern: '\d{8}'
197
+ description: '日付形式: 20240115'
198
+ バージョン:
199
+ - pattern: 'v\d+\.\d+\.\d+'
200
+ description: 'セマンティックバージョン: v1.0.0'
201
+ - pattern: '_v\d+'
202
+ description: 'バージョン接尾辞: file_v2'
203
+ - pattern: '_(final|rev\d+)'
204
+ description: '最終版または改訂版: file_final, file_rev3'
data/config/default.yml CHANGED
@@ -15,6 +15,15 @@
15
15
  - bmp
16
16
  - svg
17
17
  - webp
18
+ - heic
19
+ - heif
20
+ - tiff
21
+ - tif
22
+ - avif
23
+ - ico
24
+ - raw
25
+ - cr2
26
+ - nef
18
27
  Videos:
19
28
  - mp4
20
29
  - mov
@@ -22,12 +31,21 @@
22
31
  - mkv
23
32
  - flv
24
33
  - wmv
34
+ - webm
35
+ - m4v
36
+ - 3gp
37
+ - ogv
25
38
  Audio:
26
39
  - mp3
27
40
  - wav
28
41
  - flac
29
42
  - aac
30
43
  - m4a
44
+ - ogg
45
+ - opus
46
+ - wma
47
+ - midi
48
+ - mid
31
49
  Documents:
32
50
  - pdf
33
51
  - doc
@@ -48,6 +66,17 @@
48
66
  - c
49
67
  - go
50
68
  - rs
69
+ - sh
70
+ - bash
71
+ - zsh
72
+ - fish
73
+ - ps1
74
+ - r
75
+ - swift
76
+ - kt
77
+ - scala
78
+ - clj
79
+ - lua
51
80
  Web:
52
81
  - html
53
82
  - css
@@ -69,6 +98,34 @@
69
98
  - toml
70
99
  - xml
71
100
  - ini
101
+ Databases:
102
+ - db
103
+ - sqlite
104
+ - sqlite3
105
+ - sql
106
+ - mdb
107
+ - accdb
108
+ Fonts:
109
+ - ttf
110
+ - otf
111
+ - woff
112
+ - woff2
113
+ - eot
114
+ eBooks:
115
+ - epub
116
+ - mobi
117
+ - azw
118
+ - azw3
119
+ - fb2
120
+ Logs:
121
+ - log
122
+ - out
123
+ - err
124
+ Data:
125
+ - csv
126
+ - tsv
127
+ - parquet
128
+ - arrow
72
129
  :keywords:
73
130
  Screenshots:
74
131
  - screenshot
@@ -90,3 +147,58 @@
90
147
  - backup
91
148
  - バックアップ
92
149
  - bak
150
+ Receipts:
151
+ - receipt
152
+ - 領収書
153
+ - レシート
154
+ Reports:
155
+ - report
156
+ - 報告書
157
+ - レポート
158
+ - 報告
159
+ Proposals:
160
+ - proposal
161
+ - 提案書
162
+ - 提案
163
+ - 企画書
164
+ Presentations:
165
+ - presentation
166
+ - slide
167
+ - deck
168
+ - プレゼン
169
+ - 資料
170
+ - スライド
171
+ Templates:
172
+ - template
173
+ - テンプレート
174
+ - sample
175
+ - サンプル
176
+ - boilerplate
177
+ Drafts:
178
+ - draft
179
+ - 草案
180
+ - 下書き
181
+ - wip
182
+ - temp
183
+ - tmp
184
+ Notes:
185
+ - note
186
+ - memo
187
+ - メモ
188
+ - ノート
189
+ - 覚書
190
+ :patterns:
191
+ ByDate:
192
+ - pattern: '\d{4}-\d{2}-\d{2}'
193
+ description: 'Date format: 2024-01-15'
194
+ - pattern: '\d{4}_\d{2}_\d{2}'
195
+ description: 'Date format: 2024_01_15'
196
+ - pattern: '\d{8}'
197
+ description: 'Date format: 20240115'
198
+ Versions:
199
+ - pattern: 'v\d+\.\d+\.\d+'
200
+ description: 'Semantic version: v1.0.0'
201
+ - pattern: '_v\d+'
202
+ description: 'Version suffix: file_v2'
203
+ - pattern: '_(final|rev\d+)'
204
+ description: 'Final or revision: file_final, file_rev3'
@@ -44,7 +44,7 @@ module TidyFileOrganizer
44
44
  end
45
45
 
46
46
  def default
47
- { extensions: {}, keywords: {} }
47
+ { extensions: {}, keywords: {}, patterns: {} }
48
48
  end
49
49
 
50
50
  def path
@@ -47,7 +47,9 @@ module TidyFileOrganizer
47
47
  end
48
48
 
49
49
  def extract_organized_dirs(config)
50
- (config[:extensions].keys + config[:keywords].keys).uniq
50
+ dirs = config[:extensions].keys + config[:keywords].keys
51
+ dirs += config[:patterns].keys if config[:patterns]
52
+ dirs.uniq
51
53
  end
52
54
 
53
55
  def handle_empty_files
@@ -71,7 +73,8 @@ module TidyFileOrganizer
71
73
  filename = File.basename(file_path)
72
74
  extension = extract_extension(file_path)
73
75
 
74
- find_by_keyword(filename, config[:keywords]) ||
76
+ find_by_pattern(filename, config[:patterns]) ||
77
+ find_by_keyword(filename, config[:keywords]) ||
75
78
  find_by_extension(extension, config[:extensions])
76
79
  end
77
80
 
@@ -79,6 +82,26 @@ module TidyFileOrganizer
79
82
  File.extname(file_path).delete('.').downcase
80
83
  end
81
84
 
85
+ def find_by_pattern(filename, patterns_config)
86
+ return nil unless patterns_config
87
+
88
+ patterns_config.each do |dir, patterns|
89
+ patterns.each do |pattern_info|
90
+ pattern = pattern_info['pattern'] || pattern_info[:pattern]
91
+ next unless pattern
92
+
93
+ begin
94
+ regex = Regexp.new(pattern)
95
+ return dir if filename.match?(regex)
96
+ rescue RegexpError => e
97
+ # Skip invalid regex patterns
98
+ warn "Invalid regex pattern '#{pattern}': #{e.message}"
99
+ end
100
+ end
101
+ end
102
+ nil
103
+ end
104
+
82
105
  def find_by_keyword(filename, keywords_config)
83
106
  keywords_config.each do |dir, keywords|
84
107
  return dir if keywords.any? { |kw| filename.include?(kw) }
@@ -109,25 +109,35 @@ module TidyFileOrganizer
109
109
  def default_extensions
110
110
  if @language == 'en'
111
111
  {
112
- 'Images' => %w[jpg jpeg png gif bmp svg webp],
113
- 'Videos' => %w[mp4 mov avi mkv flv wmv],
114
- 'Audio' => %w[mp3 wav flac aac m4a],
112
+ 'Images' => %w[jpg jpeg png gif bmp svg webp heic heif tiff tif avif ico raw cr2 nef],
113
+ 'Videos' => %w[mp4 mov avi mkv flv wmv webm m4v 3gp ogv],
114
+ 'Audio' => %w[mp3 wav flac aac m4a ogg opus wma midi mid],
115
115
  'Documents' => %w[pdf doc docx xls xlsx ppt pptx txt md],
116
- 'Scripts' => %w[rb py js ts java cpp c go rs],
116
+ 'Scripts' => %w[rb py js ts java cpp c go rs sh bash zsh fish ps1 r swift kt scala clj lua],
117
117
  'Web' => %w[html css scss jsx tsx vue],
118
118
  'Archives' => %w[zip tar gz rar 7z bz2],
119
119
  'Configs' => %w[json yml yaml toml xml ini],
120
+ 'Databases' => %w[db sqlite sqlite3 sql mdb accdb],
121
+ 'Fonts' => %w[ttf otf woff woff2 eot],
122
+ 'eBooks' => %w[epub mobi azw azw3 fb2],
123
+ 'Logs' => %w[log out err],
124
+ 'Data' => %w[csv tsv parquet arrow],
120
125
  }
121
126
  else
122
127
  {
123
- '画像' => %w[jpg jpeg png gif bmp svg webp],
124
- '動画' => %w[mp4 mov avi mkv flv wmv],
125
- '音声' => %w[mp3 wav flac aac m4a],
128
+ '画像' => %w[jpg jpeg png gif bmp svg webp heic heif tiff tif avif ico raw cr2 nef],
129
+ '動画' => %w[mp4 mov avi mkv flv wmv webm m4v 3gp ogv],
130
+ '音声' => %w[mp3 wav flac aac m4a ogg opus wma midi mid],
126
131
  '書類' => %w[pdf doc docx xls xlsx ppt pptx txt md],
127
- 'スクリプト' => %w[rb py js ts java cpp c go rs],
132
+ 'スクリプト' => %w[rb py js ts java cpp c go rs sh bash zsh fish ps1 r swift kt scala clj lua],
128
133
  'ウェブ' => %w[html css scss jsx tsx vue],
129
134
  'アーカイブ' => %w[zip tar gz rar 7z bz2],
130
135
  '設定' => %w[json yml yaml toml xml ini],
136
+ 'データベース' => %w[db sqlite sqlite3 sql mdb accdb],
137
+ 'フォント' => %w[ttf otf woff woff2 eot],
138
+ '電子書籍' => %w[epub mobi azw azw3 fb2],
139
+ 'ログ' => %w[log out err],
140
+ 'データ' => %w[csv tsv parquet arrow],
131
141
  }
132
142
  end
133
143
  end
@@ -140,6 +150,13 @@ module TidyFileOrganizer
140
150
  'Minutes' => %w[議事録 minutes meeting],
141
151
  'Contracts' => %w[契約 contract 同意書],
142
152
  'Backups' => %w[backup バックアップ bak],
153
+ 'Receipts' => %w[receipt 領収書 レシート],
154
+ 'Reports' => %w[report 報告書 レポート 報告],
155
+ 'Proposals' => %w[proposal 提案書 提案 企画書],
156
+ 'Presentations' => %w[presentation slide deck プレゼン 資料 スライド],
157
+ 'Templates' => %w[template テンプレート sample サンプル boilerplate],
158
+ 'Drafts' => %w[draft 草案 下書き wip temp tmp],
159
+ 'Notes' => %w[note memo メモ ノート 覚書],
143
160
  }
144
161
  else
145
162
  {
@@ -148,6 +165,13 @@ module TidyFileOrganizer
148
165
  '議事録' => %w[議事録 minutes meeting],
149
166
  '契約書' => %w[契約 contract 同意書],
150
167
  'バックアップ' => %w[backup バックアップ bak],
168
+ '領収書' => %w[receipt 領収書 レシート],
169
+ '報告書' => %w[report 報告書 レポート 報告],
170
+ '提案書' => %w[proposal 提案書 提案 企画書],
171
+ 'プレゼン資料' => %w[presentation slide deck プレゼン 資料 スライド],
172
+ 'テンプレート' => %w[template テンプレート sample サンプル boilerplate],
173
+ '下書き' => %w[draft 草案 下書き wip temp tmp],
174
+ 'メモ' => %w[note memo メモ ノート 覚書],
151
175
  }
152
176
  end
153
177
  end
@@ -1,3 +1,3 @@
1
1
  module TidyFileOrganizer
2
- VERSION = '1.0.1'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tidy-file-organizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - sachin21
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  - !ruby/object:Gem::Version
141
141
  version: '0'
142
142
  requirements: []
143
- rubygems_version: 3.6.9
143
+ rubygems_version: 4.0.4
144
144
  specification_version: 4
145
145
  summary: File organizer based on extensions, names, and keywords.
146
146
  test_files: []