ehbrs_ruby_utils 0.41.2 → 0.43.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: 890a2f8eebfce6f021bcbbd8ba26651bac76439fde0ae3a94a69a1dee88a41e6
4
- data.tar.gz: ac80be08876fe8cb1c3cc26d0a4f18216b2fd1d9bb977e73c12f33377e0081bb
3
+ metadata.gz: d49474096e476f03b1771e1da9b08054fa00d5a5daa095735d03bbab244c36b3
4
+ data.tar.gz: 59f7d23319c7666b9751f2008b2c72fac3a4967a3c35f3988452f9c150450256
5
5
  SHA512:
6
- metadata.gz: d0cb5b9f6782c2b21e7b63884e30f726f1b19b22f88da04e423a1c9a1a9777854fe92a7e07a2768255104ef234da00aba9ffbc69cca7a8fb4ccd30cc11a86001
7
- data.tar.gz: 792058f84adc1dcede5e9cdd597225018933dfc8dd6467975af8e40bab03996de818a72cd5482b42b83177e40521cef2087ec5ca55972ec99251607afc33a949
6
+ metadata.gz: 98094f7b4340f323ad143a14f21c7ac6f7bb453d9647b3d55efbb0b4c567e4351d52fcbbb3ebd71a9e92a72a78debae83badf0eeffae02e2739c9993191ff07f
7
+ data.tar.gz: c2e6242a13bf62cf5681107be0741caef823569196cf71809f79be4e1e865c2525bf0bf6f99d8ec959c43c350a7bcb0ad6676ab9b23233e31f2a8f97bd7fe126
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Music
7
+ module Sort
8
+ module Files
9
+ class Base
10
+ common_constructor :section, :order, :name, :original_path, :padding, default: [nil, 0] do
11
+ self.original_path = original_path.if_present { |v| v.to_pathname.expand_path }
12
+ end
13
+
14
+ def reorder(new_section, new_order, padding)
15
+ self.class.new(new_section, new_order, name, original_path, padding)
16
+ end
17
+
18
+ def target_basename
19
+ "#{section}#{order.to_s.rjust(padding, '0')} #{name}"
20
+ end
21
+
22
+ def source_basename
23
+ original_path.if_present(&:basename) || raise('Original path is blank')
24
+ end
25
+
26
+ def to_s
27
+ target_basename
28
+ end
29
+
30
+ private
31
+
32
+ def <=>(other)
33
+ %i[section order name].each do |a|
34
+ r = send(a) <=> other.send(a)
35
+ return r unless r.zero?
36
+ end
37
+ 0
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Music
7
+ module Sort
8
+ module Files
9
+ class Factory
10
+ SECTION_CURRENT = 'A'
11
+ SECTION_NEW = 'Z'
12
+ SECTIONS = [SECTION_CURRENT, SECTION_NEW].freeze
13
+ NO_ORDER = Float::INFINITY
14
+
15
+ enable_simple_cache
16
+ common_constructor :path, :config_data
17
+
18
+ def basename
19
+ by_pattern(3).if_present(path.basename.to_path)
20
+ end
21
+
22
+ def build
23
+ ::EhbrsRubyUtils::Music::Sort::Files::Base.new(section, order, basename, path)
24
+ end
25
+
26
+ def order
27
+ order_from_config_data || by_pattern(2).if_present(NO_ORDER, &:to_i)
28
+ end
29
+
30
+ def section
31
+ r = section_from_config_data || by_pattern(1).if_present(SECTION_NEW)
32
+ return SECTION_CURRENT if r.blank? || r.upcase == SECTION_CURRENT
33
+
34
+ SECTION_NEW
35
+ end
36
+
37
+ private
38
+
39
+ def by_pattern(index)
40
+ match_builded_pattern.if_present { |v| v[index] }
41
+ end
42
+
43
+ def match_builded_pattern_uncached
44
+ /\A([a-z])?([0-9]+)\s+(\S.*)\z/i.match(path.basename.to_path)
45
+ end
46
+
47
+ def order_from_config_data
48
+ config_data.each_value do |files|
49
+ files.index(basename).if_present { |v| return v + 1 }
50
+ end
51
+ nil
52
+ end
53
+
54
+ def section_from_config_data
55
+ config_data.each do |section, files|
56
+ return section if files.include?(basename)
57
+ end
58
+ nil
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/core_ext'
4
+ require 'ehbrs_ruby_utils/music/sort/files/factory'
5
+
6
+ module EhbrsRubyUtils
7
+ module Music
8
+ module Sort
9
+ module Files
10
+ class Scanner
11
+ enable_simple_cache
12
+ common_constructor :root
13
+
14
+ def all
15
+ by_section.flat_map { |_s, fs| fs }
16
+ end
17
+
18
+ def config_file
19
+ root.join('.sort')
20
+ end
21
+
22
+ # @return [Integer]
23
+ def count
24
+ by_section.values.inject(0) { |a, e| a + e.count }
25
+ end
26
+
27
+ def search(name)
28
+ all.find { |sf| sf.name == name }
29
+ end
30
+
31
+ private
32
+
33
+ def by_section_uncached
34
+ r = {}
35
+ to_sort.each do |f|
36
+ sf = ::EhbrsRubyUtils::Music::Sort::Files::Factory.new(f, config_data).build
37
+ r[sf.section] ||= []
38
+ r[sf.section] << sf
39
+ end
40
+ EhbrsRubyUtils::Music::Sort::Files::Factory::SECTIONS.index_with do |s|
41
+ r[s] || []
42
+ end.freeze
43
+ end
44
+
45
+ def config_data_uncached
46
+ if config_file.exist?
47
+ ::EacRubyUtils::Yaml.load_file(config_file)
48
+ else
49
+ {}
50
+ end
51
+ end
52
+
53
+ def to_sort
54
+ root.children.reject { |e| e.basename.to_path.start_with?('.') }
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Music
7
+ module Sort
8
+ module Files
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Music
7
+ module Sort
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EhbrsRubyUtils
4
- VERSION = '0.41.2'
4
+ VERSION = '0.43.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ehbrs_ruby_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.41.2
4
+ version: 0.43.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-13 00:00:00.000000000 Z
11
+ date: 2024-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha
@@ -70,20 +70,14 @@ dependencies:
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '0.90'
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: 0.90.1
73
+ version: '0.91'
77
74
  type: :runtime
78
75
  prerelease: false
79
76
  version_requirements: !ruby/object:Gem::Requirement
80
77
  requirements:
81
78
  - - "~>"
82
79
  - !ruby/object:Gem::Version
83
- version: '0.90'
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- version: 0.90.1
80
+ version: '0.91'
87
81
  - !ruby/object:Gem::Dependency
88
82
  name: dentaku
89
83
  requirement: !ruby/object:Gem::Requirement
@@ -339,6 +333,11 @@ files:
339
333
  - lib/ehbrs_ruby_utils/music/ous/artist.rb
340
334
  - lib/ehbrs_ruby_utils/music/ous/category.rb
341
335
  - lib/ehbrs_ruby_utils/music/ous/node.rb
336
+ - lib/ehbrs_ruby_utils/music/sort.rb
337
+ - lib/ehbrs_ruby_utils/music/sort/files.rb
338
+ - lib/ehbrs_ruby_utils/music/sort/files/base.rb
339
+ - lib/ehbrs_ruby_utils/music/sort/files/factory.rb
340
+ - lib/ehbrs_ruby_utils/music/sort/files/scanner.rb
342
341
  - lib/ehbrs_ruby_utils/patches.rb
343
342
  - lib/ehbrs_ruby_utils/patches/object.rb
344
343
  - lib/ehbrs_ruby_utils/patches/object/template.rb