Class: Retriable::ExponentialBackoff

Inherits:
Object
  • Object
show all
Includes:
Validation
Defined in:
lib/retriable/exponential_backoff.rb

Constant Summary collapse

ATTRIBUTES =
%i[
  tries
  base_interval
  multiplier
  max_interval
  rand_factor
].freeze

Instance Method Summary collapse

Methods included from Validation

unbounded_tries?

Constructor Details

#initialize(opts = {}) ⇒ ExponentialBackoff

Returns a new instance of ExponentialBackoff.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/retriable/exponential_backoff.rb', line 19

def initialize(opts = {})
  @tries         = 3
  @base_interval = 0.5
  @max_interval  = 60
  @rand_factor   = 0.5
  @multiplier    = 1.5

  opts.each do |k, v|
    raise ArgumentError, "#{k} is not a valid option" if !ATTRIBUTES.include?(k)

    instance_variable_set(:"@#{k}", v)
  end

  validate!
end

Instance Method Details

#interval_providerObject



40
41
42
43
44
45
46
47
48
49
# File 'lib/retriable/exponential_backoff.rb', line 40

def interval_provider
  raw_interval = base_interval

  lambda do |_iteration|
    interval = [raw_interval, max_interval].min
    raw_interval = next_raw_interval(raw_interval)

    rand_factor.zero? ? interval : randomize(interval)
  end
end

#intervalsObject



35
36
37
38
# File 'lib/retriable/exponential_backoff.rb', line 35

def intervals
  provider = interval_provider
  Array.new(tries) { |iteration| provider.call(iteration) }
end