Class: TypeBalancer::SequentialFiller

Inherits:
Object
  • Object
show all
Defined in:
lib/type_balancer/sequential_filler.rb

Overview

Fills gaps in positions sequentially with remaining items

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(collection, items_arrays) ⇒ SequentialFiller

Returns a new instance of SequentialFiller.



6
7
8
9
# File 'lib/type_balancer/sequential_filler.rb', line 6

def initialize(collection, items_arrays)
  @collection = collection
  @items_arrays = items_arrays
end

Class Method Details

.fill(collection, positions, items_arrays) ⇒ Object



11
12
13
# File 'lib/type_balancer/sequential_filler.rb', line 11

def self.fill(collection, positions, items_arrays)
  new(collection, items_arrays).fill_gaps(positions)
end

Instance Method Details

#fill_gaps(positions) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/type_balancer/sequential_filler.rb', line 15

def fill_gaps(positions)
  return [] if positions.nil? || positions.empty?
  return positions if positions.compact.size == positions.size

  remaining_items = @items_arrays.flatten
  filled_positions = positions.dup

  positions.each_with_index do |pos, idx|
    next unless pos.nil?
    break if remaining_items.empty?

    filled_positions[idx] = remaining_items.shift
  end

  filled_positions
end