Class: Text::Gen::ResultAccumulator

Inherits:
Object
  • Object
show all
Defined in:
lib/text/gen/result_accumulator.rb

Overview

ResultAccumulator handles accumulating results with attempt tracking

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(count:, max_attempts:) ⇒ ResultAccumulator

Returns a new instance of ResultAccumulator.



13
14
15
16
17
18
# File 'lib/text/gen/result_accumulator.rb', line 13

def initialize(count:, max_attempts:)
  @count = [count, 1].max
  @max_attempts = [max_attempts, 1].max
  @results = []
  @attempts = max_attempts * count
end

Class Method Details

.accumulate(count:, max_attempts:) ⇒ Object



8
9
10
# File 'lib/text/gen/result_accumulator.rb', line 8

def accumulate(count:, max_attempts:, &)
  new(count: count, max_attempts: max_attempts).accumulate(&)
end

Instance Method Details

#accumulate(&block) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/text/gen/result_accumulator.rb', line 20

def accumulate(&block)
  while @results.size < @count
    result = block.call
    add_result(result) if result

    @attempts -= 1
    raise MaxAttemptsError if @attempts.zero?
  end

  @results
end