Sha256: b14085c465a0eb4606a81d168181174d651ebeec6c7a42ed8bdcb30a36755992

Contents?: true

Size: 1.43 KB

Versions: 13

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'
require 'ehbrs_ruby_utils/circular_list_spreader/base_level'
require 'ehbrs_ruby_utils/circular_list_spreader/item_level'

module EhbrsRubyUtils
  class CircularListSpreader
    class GroupLevel
      include ::EhbrsRubyUtils::CircularListSpreader::BaseLevel
      enable_simple_cache

      common_constructor :label

      def push(path, item)
        child_path = path.dup
        current = child_path.shift
        if child_path.any?
          push_group_level(current, child_path, item)
        else
          push_item_level(current, item)
        end
      end

      def pop
        children.values.max.pop
      end

      def pop_all
        r = []
        r << pop while remaining?
        r
      end

      def remaining_i
        children.values.inject(0) { |a, e| a + e.remaining_i }
      end

      def total_i
        children.values.inject(0) { |a, e| a + e.total_i }
      end

      private

      attr_accessor :item

      def push_group_level(current, child_path, item)
        children[current] ||= self.class.new(current)
        children[current].push(child_path, item)
      end

      def children
        @children ||= {}
      end

      def push_item_level(current, item)
        raise "Key \"#{current}\" already used" if children[current].present?

        children[current] = ::EhbrsRubyUtils::CircularListSpreader::ItemLevel.new(item)
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
ehbrs_ruby_utils-0.44.3 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.44.2 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.44.1 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.44.0 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.41.1 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.41.0 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.40.0 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.39.0 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.38.0 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.37.0 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.36.1 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.36.0 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
ehbrs_ruby_utils-0.35.0 lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb