organize_files 1.0.8 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9008f41b4a6121547ffd984547a2e350bed7eb7e2ae04b1c5edf52b8ba8d2b41
4
- data.tar.gz: f84214ec8cee553ef23ec51e9c5f14209133ddbf2f3b5d6c60c077d14604dab4
3
+ metadata.gz: 423b385e662072ba24906140c76d00b8ee2bf1c782b84e1eb54fcb3971049017
4
+ data.tar.gz: d64f1c10aa79af48758da287679721a644a46804e94a14ad783fc59d4a916c41
5
5
  SHA512:
6
- metadata.gz: 226557a4787f761c5cf1f3ea9647df83ad1f80d9dd2c4dc1b4a84f1eb1da82548df0fce853e58ab460c5c68633bf1ba79e61c24d2c2ebac83fa9fa1d0593c3a8
7
- data.tar.gz: 9e4ee7a8529da9cd70a3e09903f678560142f926b6c21c18448c7107bd425123d3b57d1a10d7a3e383cbc86c1d945653160e0caf97041900eb4336b927198fe8
6
+ metadata.gz: 6de2a007e0c69634c8e348bd5ecd40fc59710037e8636e7113973e9475b65b29a1abcc0db7c0bcb61c284b3badb623b9f79ce741eccdcee644a6add4f4c1da9a
7
+ data.tar.gz: 56c40d0c6f0d304b26e7c99ab26b5b2e9a3f74cfdd4ad260f6ed56eda634bbf5e66de3eb6cdd7d0ce9304462c0454cd54aad76f0a07ac94593c7cecc8b811870
data/Gemfile CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source 'http://rubygems.org'
3
+ source "http://rubygems.org"
4
4
 
5
5
  gemspec
6
+
7
+ gem "pry", "~> 0.14.2"
data/README.md CHANGED
@@ -1,17 +1,79 @@
1
1
  # OrganizeFiles
2
2
 
3
- This gem provides `Organize Files` integration for Ruby and allows to organize files in your system into their respective folders.
3
+ Decluttering your file system doesn’t have to be a hassle anymore. Moving files into their appropriate folders can be tedious and time-consuming—especially when done manually.
4
+
5
+ The Organize Files gem for Ruby streamlines this process by automatically organizing files based on their extensions. Simply point it to a directory, and it will sort the files into their respective folders. If a folder for a specific file extension doesn't already exist, it will be created for you.
4
6
 
5
7
  ## Getting started
6
8
 
7
- - Install the gem
8
- `gem install organize_files`
9
- - Enter the directory you want to sort the files in.
10
- `organize_files '/path/to/file'`
9
+ Install the gem
10
+ ```bash
11
+ gem install organize_files
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ Enter the directory you want to sort the files in.
17
+
18
+ ```bash
19
+ organize_files [options] <directory>
20
+ ```
21
+ - <directory> The directory you want to organize
22
+
23
+ Example:
24
+ ```bash
25
+ organize_files '/path/to/downloads'
26
+ ```
27
+
28
+ Output:
29
+ ```bash
30
+ Successfully moved index2.pdf to /path/to/downloads/Documents/index2.pdf
31
+ ```
32
+
33
+ Options:
34
+ - `-c`, `--config`, CONFIG_FILE: Specify the configuration file to use.
35
+
36
+ - If not provided, the script will look for `~/.organize_config.yml` in your home directory.
37
+ - If ~/.organize_config.yml is not found, it will use the built-in default configuration.
38
+ - `-h`, `--help`, Prints this help message.
39
+
40
+
41
+ ## Configuration
42
+ You can customize how files are categorized by creating a YAML configuration file.
43
+
44
+ Default Configuration File:
45
+
46
+ The script will automatically look for a configuration file named ~/.organize_config.yml in your home directory.
47
+
48
+ Example ~/.organize_config.yml:
49
+
50
+ ```YAML
51
+ images:
52
+ - .jpg
53
+ - .jpeg
54
+ - .png
55
+ documents:
56
+ - .pdf
57
+ - .docx
58
+ - .txt
59
+ audio:
60
+ - .mp3
61
+ - .wav
62
+ videos:
63
+ - .mp4
64
+ - .mov
65
+ archives:
66
+ - .zip
67
+ - .rar
68
+ programming:
69
+ - .rb
70
+ - .py
71
+ - .js
72
+ ```
11
73
 
12
74
  ### Requirements
13
75
 
14
76
  This gem requires Ruby 3.0+.
15
77
 
16
78
  ## Contributing
17
- Please see [CONTRIBUTING.md](CONTRIBUTING.md)
79
+ Please see [CONTRIBUTING.md](CONTRIBUTING.md)
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require_relative "../lib/organize_files"
6
+ require "optparse"
7
+
8
+ options = {}
9
+ options[:directory] = ARGV[0]
10
+
11
+ OptionParser.new do |opts|
12
+ opts.banner = "Usage: organize_files [options]"
13
+
14
+ opts.on("-i", "--ignore-empty-directories", "Ignore Empty Directories") do
15
+ options[:ignore_empty_directory] = true
16
+ end
17
+
18
+ opts.on("-c", "--config CONFIG_FILE", "Specify config file (default: .organize_config.yml)") do |config|
19
+ options[:config] = config
20
+ end
21
+
22
+ opts.on("-h", "--help", "Prints this help") do
23
+ puts opts
24
+ exit
25
+ end
26
+ end.parse!
27
+
28
+ if options[:directory].nil?
29
+ puts "You must specify a directory to organize"
30
+ exit 1
31
+ end
32
+
33
+ sorter = OrganizeFiles::Organizer.new(options)
34
+ sorter.organize
35
+
36
+ puts "Files in '#{options[:directory]}' have been organized"
@@ -1,9 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fileutils'
3
+ require "fileutils"
4
4
 
5
5
  module OrganizeFiles
6
- # file_handler.rb
7
6
  class FileHandler
8
7
  def initialize(directory)
9
8
  @directory = directory
@@ -1,35 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OrganizeFiles
4
- # file_sorter.rb
5
4
  class FileOrder
6
- TYPES = {
7
- images: ['.jpg', '.jpeg', '.png', '.gif', '.avif'],
8
- documents: ['.pdf', '.docx', '.txt', '.md', '.json', '.csv', '.xls', '.xlsx', '.ppt', '.pptx'],
9
- audio: ['.mp3', '.wav', '.flac'],
10
- videos: ['.mp4', '.mkv', '.avi'],
11
- archives: ['.zip', '.tar', '.rar', '.gz', '.7z', '.iso'],
12
- apks: ['.apk']
13
- }.freeze
14
-
15
- def initialize(file)
5
+ def initialize(file, config_file = nil)
16
6
  @file = file
7
+ @config_file = config_file || "~/.organize_config.yml"
8
+ @types = load_config
17
9
  end
18
10
 
19
11
  def categorize
20
12
  file_ext = File.extname(@file)
21
- category = TYPES.find { |_key, exts| exts.include?(file_ext) }
22
- return 'Archives' unless category
13
+ category = @types.find { |_key, exts| exts.include?(file_ext) }
14
+ return "Miscellaneous" unless category
15
+
16
+ category[0].to_s.capitalize
17
+ end
23
18
 
24
- case category[0]
25
- when :images then 'Pictures'
26
- when :documents then 'Documents'
27
- when :audio then 'Music'
28
- when :videos then 'Videos'
29
- when :apks then 'Apks'
19
+ private
20
+
21
+ def load_config
22
+ if File.exist?(@config_file)
23
+ YAML.load_file(@config_file)
30
24
  else
31
- 'Archives'
25
+ default_config
32
26
  end
33
27
  end
28
+
29
+ def default_config
30
+ {
31
+ pictures: [".jpg", ".jpeg", ".png", ".gif", ".avif"],
32
+ documents: [".pdf", ".docx", ".txt", ".md", ".json", ".csv", ".xls", ".xlsx", ".ppt", ".pptx"],
33
+ music: [".mp3", ".wav", ".flac"],
34
+ videos: [".mp4", ".mkv", ".avi"],
35
+ archives: [".zip", ".tar", ".rar", ".gz", ".7z", ".iso"],
36
+ apks: [".apk"]
37
+ }
38
+ end
34
39
  end
35
40
  end
@@ -1,36 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'file_handler'
4
- require_relative 'file_order'
5
-
6
3
  module OrganizeFiles
7
- # organizer.rb
8
4
  class Organizer
9
- attr_reader :directory
10
-
11
- def initialize(directory)
12
- @directory = directory
13
- @file_handler = FileHandler.new(directory)
5
+ def initialize(options)
6
+ @directory = options[:directory]
7
+ @config = options[:config]
8
+ @file_handler = FileHandler.new(@directory)
9
+ @ignore_empty_directory = options[:ignore_empty_directory]
14
10
  end
15
11
 
16
12
  def organize
17
13
  @file_handler.scan_files.each do |file|
18
14
  next if file_directory?(file)
19
15
 
20
- categorize_file = OrganizeFiles::FileOrder.new(file).categorize
16
+ categorize_file = FileOrder.new(file, @config).categorize
21
17
  @file_handler.move_file(file, categorize_file)
22
- @file_handler.remove_empty_folders
23
18
  end
19
+ @file_handler.remove_empty_folders unless @ignore_empty_directory
24
20
  end
25
21
 
26
22
  private
27
23
 
28
24
  def file_directory?(file)
29
- directory = []
25
+ directories = []
30
26
  expanded_file_path = File.expand_path(file, @directory)
31
- File.directory?(expanded_file_path) && directory << expanded_file_path
27
+ File.directory?(expanded_file_path) && directories << expanded_file_path
32
28
 
33
- !directory.empty?
29
+ !directories.empty?
34
30
  end
35
31
  end
36
32
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OrganizeFiles
4
- VERSION = '1.0.8'
4
+ VERSION = "1.1.1"
5
5
  end
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'organize_files/organizer'
3
+ require "zeitwerk"
4
+ require "yaml"
4
5
 
5
- organizer = OrganizeFiles::Organizer.new(ARGV[0])
6
- organizer.organize
6
+ module OrganizeFiles
7
+ @loader = Zeitwerk::Loader.for_gem
8
+ @loader.setup
9
+ end
@@ -1,22 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.expand_path('lib/organize_files/version', __dir__)
3
+ require File.expand_path("lib/organize_files/version", __dir__)
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = 'organize_files'
7
- s.authors = ['Mayank Agnihotri']
6
+ s.name = "organize_files"
7
+ s.authors = ["Mayank Agnihotri"]
8
8
  s.version = OrganizeFiles::VERSION
9
- s.files = Dir['README.md', 'LICENSE', 'CHANGELOG.md', 'lib/**/*.rb', 'lib/**/*.rake', 'organize_files.gemspec',
10
- '.github/*.md', 'Gemfile', 'Rakefile', 'CONTRIBUTING.md']
11
- s.licenses = ['MIT']
12
- s.summary = 'Organize files into their own separate folders'
9
+ s.files = Dir["README.md", "LICENSE", "CHANGELOG.md", "lib/**/*.rb", "lib/**/*.rake", "organize_files.gemspec",
10
+ ".github/*.md", "Gemfile", "Rakefile", "CONTRIBUTING.md", "exe/*"]
11
+ s.licenses = ["MIT"]
12
+ s.summary = "Organize files into their own separate folders"
13
13
  s.platform = Gem::Platform::RUBY
14
- s.required_ruby_version = '>= 3.1.4'
15
- s.extra_rdoc_files = ['README.md']
16
- s.add_development_dependency 'rubocop', '~> 1.68'
17
- s.executables = ['organize_files']
18
- s.homepage = 'https://github.com/mayankagnihotri7/file-organizer'
14
+ s.required_ruby_version = ">= 3.1.4"
15
+ s.extra_rdoc_files = ["README.md"]
16
+ s.add_dependency "zeitwerk", "~> 2.4"
17
+
18
+ s.add_development_dependency "rspec"
19
+ s.add_development_dependency "rubocop", "~> 1.68"
20
+
21
+ s.bindir = "exe"
22
+ s.executables = s.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
23
+ s.homepage = "https://github.com/mayankagnihotri7/file-organizer"
24
+
19
25
  s.metadata = {
20
- 'source_code_uri' => 'https://github.com/mayankagnihotri7/file-organizer'
26
+ "source_code_uri" => "https://github.com/mayankagnihotri7/file-organizer"
21
27
  }
22
28
  end
metadata CHANGED
@@ -1,15 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: organize_files
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mayank Agnihotri
8
- autorequire:
9
- bindir: bin
8
+ bindir: exe
10
9
  cert_chain: []
11
- date: 2024-12-29 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: zeitwerk
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.4'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.4'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rspec
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
13
40
  - !ruby/object:Gem::Dependency
14
41
  name: rubocop
15
42
  requirement: !ruby/object:Gem::Requirement
@@ -24,8 +51,6 @@ dependencies:
24
51
  - - "~>"
25
52
  - !ruby/object:Gem::Version
26
53
  version: '1.68'
27
- description:
28
- email:
29
54
  executables:
30
55
  - organize_files
31
56
  extensions: []
@@ -36,7 +61,7 @@ files:
36
61
  - Gemfile
37
62
  - LICENSE
38
63
  - README.md
39
- - bin/organize_files
64
+ - exe/organize_files
40
65
  - lib/organize_files.rb
41
66
  - lib/organize_files/file_handler.rb
42
67
  - lib/organize_files/file_order.rb
@@ -48,7 +73,6 @@ licenses:
48
73
  - MIT
49
74
  metadata:
50
75
  source_code_uri: https://github.com/mayankagnihotri7/file-organizer
51
- post_install_message:
52
76
  rdoc_options: []
53
77
  require_paths:
54
78
  - lib
@@ -63,8 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
87
  - !ruby/object:Gem::Version
64
88
  version: '0'
65
89
  requirements: []
66
- rubygems_version: 3.3.26
67
- signing_key:
90
+ rubygems_version: 3.6.8
68
91
  specification_version: 4
69
92
  summary: Organize files into their own separate folders
70
93
  test_files: []
data/bin/organize_files DELETED
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'optparse'
4
- require 'organize_files'
5
-
6
- options = {}
7
- OptionParser.new do |opts|
8
- opts.banner = 'Usage: organize_files [options]'
9
-
10
- opts.on('-d', '--directory DIRECTORY', 'Directory to organize') do |directory|
11
- options[:directory] = directory
12
- end
13
-
14
- opts.on('-h', '--help', 'Prints this help') do
15
- puts opts
16
- exit
17
- end
18
- end.parse!
19
-
20
- if options[:directory].nil?
21
- puts 'You must specify a directory to organize'
22
- exit 1
23
- end
24
-
25
- sorter = OrganizeFiles::Organizer.new(options[:directory])
26
- sorter.organize
27
-
28
- puts "Files in '#{options[:directory]}' have been organized"