lara-file-tools 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5cf7320b83a026cf309aa512e9e774ffc68cf4ce9279502d73296c9b6cb42b64
4
+ data.tar.gz: 25ade7944a14168ad22e9499485f34abb0707ecffdcc9adafd7c679ca7f811e6
5
+ SHA512:
6
+ metadata.gz: b1450f8839a75a30fca0215ae0e26f9116a4ef8c459096e65cd1d997b63d9445397201d8e0ed33eaa93348ab1146eb173d6e55ff3114437655d370799e4d292f
7
+ data.tar.gz: 52965a5359f205d49bba055ab99dbe8b84db25fffcab81326e93d54aa92b7e99498f6b49e57a10d3a0108f5452374aaf85dd2de724b6cf3a422378bd611a71e7
@@ -0,0 +1,48 @@
1
+ module Lara
2
+ module FileTools
3
+ class Organizer
4
+ def initialize(dir = ".")
5
+ @dir = dir
6
+ @count = 0
7
+ end
8
+
9
+ def by_extension
10
+ return "No directory: #{@dir}" unless Dir.exist?(@dir)
11
+ results = []
12
+ Dir.entries(@dir).sort.each do |f|
13
+ next if f.start_with?(".") || !File.file?(File.join(@dir, f))
14
+ @count += 1
15
+ if @count > LIMIT
16
+ results << "Trial limit reached (#{LIMIT} files). Full version: #{FileTools.full_version}"
17
+ break
18
+ end
19
+ ext = File.extname(f).empty? ? "no_ext" : File.extname(f).delete(".")
20
+ ext_dir = File.join(@dir, ext)
21
+ Dir.mkdir(ext_dir) unless Dir.exist?(ext_dir)
22
+ File.rename(File.join(@dir, f), File.join(ext_dir, f))
23
+ results << "#{f} -> #{ext}/"
24
+ end
25
+ results.empty? ? "No files to organize" : results.join("\n")
26
+ end
27
+
28
+ def by_date_prefix
29
+ return "No directory: #{@dir}" unless Dir.exist?(@dir)
30
+ results = []
31
+ Dir.entries(@dir).sort.each do |f|
32
+ next if f.start_with?(".") || !File.file?(File.join(@dir, f))
33
+ @count += 1
34
+ if @count > LIMIT
35
+ results << "Trial limit reached (#{LIMIT} files). Full version: #{FileTools.full_version}"
36
+ break
37
+ end
38
+ mtime = File.mtime(File.join(@dir, f))
39
+ prefix = mtime.strftime("%Y-%m-%d")
40
+ new_name = "#{prefix}_#{f}"
41
+ File.rename(File.join(@dir, f), File.join(@dir, new_name))
42
+ results << "#{f} -> #{new_name}"
43
+ end
44
+ results.empty? ? "No files to organize" : results.join("\n")
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,49 @@
1
+ module Lara
2
+ module FileTools
3
+ class Renamer
4
+ def initialize(dir = ".")
5
+ @dir = dir
6
+ @count = 0
7
+ end
8
+
9
+ def prepend(pattern)
10
+ apply { |f| "#{pattern}_#{f}" }
11
+ end
12
+
13
+ def append(pattern)
14
+ apply { |f| "#{f.sub(/\.\w+$/, "")}_#{pattern}#{File.extname(f)}" }
15
+ end
16
+
17
+ def replace(old, new)
18
+ apply { |f| f.sub(old, new) }
19
+ end
20
+
21
+ def sequence(format = "file_%03d")
22
+ i = 0
23
+ apply { |f| i += 1; "#{format % i}#{File.extname(f)}" }
24
+ end
25
+
26
+ private
27
+
28
+ def apply
29
+ return "No directory: #{@dir}" unless Dir.exist?(@dir)
30
+ results = []
31
+ Dir.entries(@dir).sort.each do |f|
32
+ next if f.start_with?(".") || !File.file?(File.join(@dir, f))
33
+ @count += 1
34
+ if @count > LIMIT
35
+ results << "Trial limit reached (#{LIMIT} files). Full version: #{FileTools.full_version}"
36
+ break
37
+ end
38
+ new_name = yield(f)
39
+ old_path = File.join(@dir, f)
40
+ new_path = File.join(@dir, new_name)
41
+ next if new_name == f
42
+ File.rename(old_path, new_path)
43
+ results << "#{f} -> #{new_name}"
44
+ end
45
+ results.empty? ? "No files to rename" : results.join("\n")
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,5 @@
1
+ module Lara
2
+ module FileTools
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "file_tools/version"
2
+ require_relative "file_tools/renamer"
3
+ require_relative "file_tools/organizer"
4
+
5
+ module Lara
6
+ module FileTools
7
+ LIMIT = 10
8
+
9
+ def self.full_version
10
+ "https://lara-store.xyz"
11
+ end
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lara-file-tools
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Lara AI
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
12
+ description: 'Rename files in bulk — prepend, append, replace, sequence. Organize
13
+ by extension or date. Trial: 10 files. Full: https://lara-store.xyz'
14
+ email: jarod79tm@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/lara/file_tools.rb
20
+ - lib/lara/file_tools/organizer.rb
21
+ - lib/lara/file_tools/renamer.rb
22
+ - lib/lara/file_tools/version.rb
23
+ homepage: https://lara-store.xyz
24
+ licenses:
25
+ - MIT
26
+ metadata:
27
+ homepage_uri: https://lara-store.xyz
28
+ rubygems_mfa_required: 'false'
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '2.7'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubygems_version: 3.6.7
44
+ specification_version: 4
45
+ summary: Batch file rename & organize
46
+ test_files: []