ehbrs_ruby_utils 0.41.1 → 0.42.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 +4 -4
- data/lib/ehbrs_ruby_utils/fs/selected/build.rb +2 -0
- data/lib/ehbrs_ruby_utils/fs/selected/build_file.rb +1 -1
- data/lib/ehbrs_ruby_utils/music/sort/commands/base.rb +31 -0
- data/lib/ehbrs_ruby_utils/music/sort/commands/dump.rb +67 -0
- data/lib/ehbrs_ruby_utils/music/sort/commands/load.rb +36 -0
- data/lib/ehbrs_ruby_utils/music/sort/commands/shuffle.rb +55 -0
- data/lib/ehbrs_ruby_utils/music/sort/commands.rb +13 -0
- data/lib/ehbrs_ruby_utils/music/sort/files/base.rb +43 -0
- data/lib/ehbrs_ruby_utils/music/sort/files/factory.rb +64 -0
- data/lib/ehbrs_ruby_utils/music/sort/files/scanner.rb +60 -0
- data/lib/ehbrs_ruby_utils/music/sort/files.rb +13 -0
- data/lib/ehbrs_ruby_utils/music/sort.rb +11 -0
- data/lib/ehbrs_ruby_utils/patches/object/template.rb +1 -3
- data/lib/ehbrs_ruby_utils/version.rb +1 -1
- metadata +22 -12
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d257573a9117902808e20c43bf002671f832d16cc40bf676cfb46282435b22f5
         | 
| 4 | 
            +
              data.tar.gz: fa5b446750faae117f1902457683b1b46599f85e64d40b7402451433d007d861
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2f5dbbbcffc5213abb54303cc9272e3875f40ba4f80c759298c6ba4d6677e806862b5a221a26fd487f45c26c02f7075decbf1251b424dd15a28ab186c35d9d5c
         | 
| 7 | 
            +
              data.tar.gz: dd456900169ed432a7c2b3aaef91ab93fff318b098eddcade488b5877df89b9babdeb45ec1336eadeb2ecde18d80a1c1b7011a5fa56952ed6427e60f3aab41ea
         | 
| @@ -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,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
         | 
    
        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. | 
| 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- | 
| 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. | 
| 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. | 
| 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. | 
| 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. | 
| 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
         |