lib/retriable/config.rb
require_relative "exponential_backoff"
module Retriable
class Config
ATTRIBUTES = (ExponentialBackoff::ATTRIBUTES + [
:sleep_disabled,
:max_elapsed_time,
:intervals,
:timeout,
:on,
:on_retry,
:contexts,
]).freeze
attr_accessor(*ATTRIBUTES)
def initialize(opts = {})
backoff = ExponentialBackoff.new
@tries = backoff.tries
@base_interval = backoff.base_interval
@max_interval = backoff.max_interval
@rand_factor = backoff.rand_factor
@multiplier = backoff.multiplier
@sleep_disabled = false
@max_elapsed_time = 900 # 15 min
@intervals = nil
@timeout = nil
@on = [StandardError]
@on_retry = nil
@contexts = {}
opts.each do |k, v|
raise ArgumentError, "#{k} is not a valid option" if !ATTRIBUTES.include?(k)
instance_variable_set(:"@#{k}", v)
end
end
def to_h
ATTRIBUTES.each_with_object({}) do |key, hash|
hash[key] = public_send(key)
end
end
end
end