ehbrs_ruby_utils 0.41.2 → 0.43.0

Sign up to get free protection for your applications and to get access to all the features.
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