Class: TypeBalancer::AlternatingFiller

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

Overview

Fills gaps by alternating between primary and secondary items

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(collection, primary_items, secondary_items) ⇒ AlternatingFiller

Returns a new instance of AlternatingFiller.



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

def initialize(collection, primary_items, secondary_items)
  @collection = collection
  @primary_items = primary_items
  @secondary_items = secondary_items
end

Class Method Details

.fill(collection, positions, primary_items, secondary_items) ⇒ Object



12
13
14
# File 'lib/type_balancer/alternating_filler.rb', line 12

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

Instance Method Details

#fill_gaps(positions) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/type_balancer/alternating_filler.rb', line 16

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

  filled_positions = positions.dup
  use_primary = true

  positions.each_with_index do |pos, idx|
    next unless pos.nil?

    item = select_next_item(use_primary)
    break unless item

    filled_positions[idx] = item
    use_primary = !use_primary
  end

  filled_positions
end