ehbrs_ruby_utils 0.41.1 → 0.42.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: 586c5869279d721b48b5cf6d6ce585edc26601a00aff87f412fa0cad3142206e
4
- data.tar.gz: bf287e776722f8b92f3f7fe7832fdc574251c4ebee744c1f3018ef2957e278d7
3
+ metadata.gz: d257573a9117902808e20c43bf002671f832d16cc40bf676cfb46282435b22f5
4
+ data.tar.gz: fa5b446750faae117f1902457683b1b46599f85e64d40b7402451433d007d861
5
5
  SHA512:
6
- metadata.gz: ba4bc8bce782d16640c2e984ffd02f1a4a8dd390921f136321697efc1d3dd03339baeac2722ff5f1d9f858e44f3d616b3bb1b83dca6358d5993f621c3fd6593a
7
- data.tar.gz: f9711900cb11defad1165a869e77bdc5ff160b7a070f79870bd927c624871271476505900b1d45dd88bf7598191809879b84fc9c3f40d5f6a37d5302caf47c83
6
+ metadata.gz: 2f5dbbbcffc5213abb54303cc9272e3875f40ba4f80c759298c6ba4d6677e806862b5a221a26fd487f45c26c02f7075decbf1251b424dd15a28ab186c35d9d5c
7
+ data.tar.gz: dd456900169ed432a7c2b3aaef91ab93fff318b098eddcade488b5877df89b9babdeb45ec1336eadeb2ecde18d80a1c1b7011a5fa56952ed6427e60f3aab41ea
@@ -25,6 +25,8 @@ module EhbrsRubyUtils
25
25
  private
26
26
 
27
27
  def clear_target_dir
28
+ return unless target_dir.exist?
29
+
28
30
  target_dir.children.each do |c|
29
31
  c.unlink if c.symlink? && c.directory?
30
32
  end
@@ -11,7 +11,7 @@ module EhbrsRubyUtils
11
11
  end
12
12
 
13
13
  def perform
14
- target_path.make_symlink(path)
14
+ target_path.assert_parent.make_symlink(path)
15
15
  end
16
16
 
17
17
  def target_path
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/core_ext'
4
+ require 'ehbrs_ruby_utils/music/sort/files/scanner'
5
+
6
+ module EhbrsRubyUtils
7
+ module Music
8
+ module Sort
9
+ module Commands
10
+ class Base
11
+ enable_speaker
12
+ enable_simple_cache
13
+ common_constructor :root, :confirm do
14
+ self.root = root.to_pathname
15
+ run
16
+ end
17
+
18
+ private
19
+
20
+ def config_file
21
+ scanner.config_file
22
+ end
23
+
24
+ def scanner_uncached
25
+ ::EhbrsRubyUtils::Music::Sort::Files::Scanner.new(root)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/core_ext'
4
+ require 'ehbrs_ruby_utils/music/sort/commands/base'
5
+ require 'ehbrs_ruby_utils/music/sort/files/base'
6
+ require 'ehbrs_ruby_utils/music/sort/files/factory'
7
+
8
+ module EhbrsRubyUtils
9
+ module Music
10
+ module Sort
11
+ module Commands
12
+ class Dump < EhbrsRubyUtils::Music::Sort::Commands::Base
13
+ private
14
+
15
+ def run
16
+ if File.exist?(config_file)
17
+ @config = YAML.load_file(config_file)
18
+ to_rename.each { |sf| rename(sf) }
19
+ else
20
+ fatal_error("File \"#{config_file}\" does not exist")
21
+ end
22
+ end
23
+
24
+ def to_rename
25
+ r = []
26
+ ::EhbrsRubyUtils::Music::Sort::Files::Factory::SECTIONS.each do |section|
27
+ i = 1
28
+ (@config[section] || []).each do |name|
29
+ r << ::EhbrsRubyUtils::Music::Sort::Files::Base.new(section, i, name, nil)
30
+ i += 1
31
+ end
32
+ end
33
+ r
34
+ end
35
+
36
+ def rename(source_file)
37
+ o = scanner.search(source_file.name)
38
+ if o
39
+ rename_on_found(source_file, o)
40
+ else
41
+ warn("File not found for \"#{source_file}\"")
42
+ end
43
+ end
44
+
45
+ def rename_on_found(source_file, sorted_file)
46
+ o = sorted_file.reorder(source_file.section, source_file.order, order_padding)
47
+ info("\"#{o.source_basename}\" => \"#{o.target_basename}\"")
48
+ confirm_rename(o.source_basename, o.target_basename) if confirm
49
+ end
50
+
51
+ def confirm_rename(old_basename, new_basename)
52
+ op = File.expand_path(old_basename, root)
53
+ np = File.expand_path(new_basename, root)
54
+ return if np == op
55
+ raise "\"#{np}\" (From \"#{op}\") already exists" if File.exist?(np)
56
+
57
+ File.rename(op, np)
58
+ end
59
+
60
+ def order_padding_uncached
61
+ scanner.count.to_s.length
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/core_ext'
4
+ require 'ehbrs_ruby_utils/music/sort/commands/base'
5
+
6
+ module EhbrsRubyUtils
7
+ module Music
8
+ module Sort
9
+ module Commands
10
+ class Load < EhbrsRubyUtils::Music::Sort::Commands::Base
11
+ private
12
+
13
+ def run
14
+ info "Reading \"#{root}\"..."
15
+ config = build_config
16
+ s = config.to_yaml
17
+ puts s
18
+ if confirm
19
+ info("Writing to \"#{config_file}\"...")
20
+ File.write(config_file, s)
21
+ end
22
+ puts 'Done!'.green
23
+ end
24
+
25
+ def build_config
26
+ config = {}
27
+ scanner.by_section.each do |section, fs|
28
+ config[section] = fs.sort.map(&:name)
29
+ end
30
+ config
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/core_ext'
4
+ require 'ehbrs_ruby_utils/music/sort/commands/base'
5
+ require 'ehbrs_ruby_utils/music/sort/files/factory'
6
+
7
+ module EhbrsRubyUtils
8
+ module Music
9
+ module Sort
10
+ module Commands
11
+ class Shuffle < EhbrsRubyUtils::Music::Sort::Commands::Base
12
+ private
13
+
14
+ def run
15
+ if confirm
16
+ load_last_shuffle
17
+ else
18
+ dump_last_shuffle
19
+ end
20
+ end
21
+
22
+ def dump_last_shuffle
23
+ s = build_config.to_yaml
24
+ puts s
25
+ info("Writing to \"#{last_shuffle_file}\"...")
26
+ File.write(last_shuffle_file, s)
27
+ puts 'Done!'.green
28
+ end
29
+
30
+ def load_last_shuffle
31
+ if File.exist?(last_shuffle_file)
32
+ IO.copy_stream(last_shuffle_file, config_file)
33
+ File.unlink(last_shuffle_file)
34
+ puts 'Done!'.green
35
+ else
36
+ fatal_error "File \"#{last_shuffle_file}\" does not exist"
37
+ end
38
+ end
39
+
40
+ def last_shuffle_file
41
+ File.join(root, '.last_shuffle')
42
+ end
43
+
44
+ def build_config
45
+ config = {}
46
+ config[::EhbrsRubyUtils::Music::Sort::Files::Factory::SECTION_CURRENT] =
47
+ scanner.all.to_a.shuffle.map(&:name)
48
+ config[::EhbrsRubyUtils::Music::Sort::Files::Factory::SECTION_NEW] = []
49
+ config
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ 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 Commands
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -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,6 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_templates/patches/object/template'
4
-
5
- EacTemplates::Searcher.default.included_paths <<
6
- File.expand_path('../../../../template', __dir__)
4
+ require 'eac_templates/sources/from_all_gems'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EhbrsRubyUtils
4
- VERSION = '0.41.1'
4
+ VERSION = '0.42.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.1
4
+ version: 0.42.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-02-12 00:00:00.000000000 Z
11
+ date: 2024-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha
@@ -50,34 +50,34 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.9'
53
+ version: '0.10'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 0.10.1
54
57
  type: :runtime
55
58
  prerelease: false
56
59
  version_requirements: !ruby/object:Gem::Requirement
57
60
  requirements:
58
61
  - - "~>"
59
62
  - !ruby/object:Gem::Version
60
- version: '0.9'
63
+ version: '0.10'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 0.10.1
61
67
  - !ruby/object:Gem::Dependency
62
68
  name: avm
63
69
  requirement: !ruby/object:Gem::Requirement
64
70
  requirements:
65
71
  - - "~>"
66
72
  - !ruby/object:Gem::Version
67
- version: '0.84'
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: 0.84.2
73
+ version: '0.91'
71
74
  type: :runtime
72
75
  prerelease: false
73
76
  version_requirements: !ruby/object:Gem::Requirement
74
77
  requirements:
75
78
  - - "~>"
76
79
  - !ruby/object:Gem::Version
77
- version: '0.84'
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: 0.84.2
80
+ version: '0.91'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: dentaku
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -333,6 +333,16 @@ files:
333
333
  - lib/ehbrs_ruby_utils/music/ous/artist.rb
334
334
  - lib/ehbrs_ruby_utils/music/ous/category.rb
335
335
  - lib/ehbrs_ruby_utils/music/ous/node.rb
336
+ - lib/ehbrs_ruby_utils/music/sort.rb
337
+ - lib/ehbrs_ruby_utils/music/sort/commands.rb
338
+ - lib/ehbrs_ruby_utils/music/sort/commands/base.rb
339
+ - lib/ehbrs_ruby_utils/music/sort/commands/dump.rb
340
+ - lib/ehbrs_ruby_utils/music/sort/commands/load.rb
341
+ - lib/ehbrs_ruby_utils/music/sort/commands/shuffle.rb
342
+ - lib/ehbrs_ruby_utils/music/sort/files.rb
343
+ - lib/ehbrs_ruby_utils/music/sort/files/base.rb
344
+ - lib/ehbrs_ruby_utils/music/sort/files/factory.rb
345
+ - lib/ehbrs_ruby_utils/music/sort/files/scanner.rb
336
346
  - lib/ehbrs_ruby_utils/patches.rb
337
347
  - lib/ehbrs_ruby_utils/patches/object.rb
338
348
  - lib/ehbrs_ruby_utils/patches/object/template.rb