class Retriable::ExponentialBackoff
Constants
- ATTRIBUTES
Public Class Methods
new(opts = {})
click to toggle source
# File lib/retriable/exponential_backoff.rb, line 13 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 end
Public Instance Methods
intervals()
click to toggle source
# File lib/retriable/exponential_backoff.rb, line 26 def intervals intervals = Array.new(tries) do |iteration| [base_interval * multiplier**iteration, max_interval].min end return intervals if rand_factor.zero? intervals.map { |i| randomize(i) } end
Private Instance Methods
randomize(interval)
click to toggle source
# File lib/retriable/exponential_backoff.rb, line 38 def randomize(interval) delta = rand_factor * interval * 1.0 min = interval - delta max = interval + delta rand(min..max) end