lib/take2/configuration.rb in take2-0.1.1 vs lib/take2/configuration.rb in take2-1.0.0

- old
+ new

@@ -6,32 +6,23 @@ class Configuration CONFIG_ATTRS = [:retries, :retriable, :retry_proc, :retry_condition_proc, - :time_to_sleep, - :backoff_setup, :backoff_intervals].freeze attr_accessor(*CONFIG_ATTRS) def initialize(options = {}) # Defaults @retries = 3 - @retriable = [ - Net::HTTPServerException, - Net::HTTPRetriableError, - Errno::ECONNRESET, - IOError, - ].freeze + @retriable = [] @retry_proc = proc {} @retry_condition_proc = proc { false } - @time_to_sleep = 0 # TODO: Soft deprecate time to sleep - @backoff_setup = { type: :constant, start: 3 } - @backoff_intervals = Backoff.new(*@backoff_setup.values).intervals - # Overwriting the defaults - validate_options(options, &setter) + @backoff_intervals = Backoff.new(:constant, 3).intervals + + merge_options!(options) end def to_hash CONFIG_ATTRS.each_with_object({}) do |key, hash| hash[key] = public_send(key) @@ -40,40 +31,30 @@ def [](value) public_send(value) end - def validate_options(options) + def merge_options!(options = {}) + validate!(options).each do |key, value| + public_send("#{key}=", value) + end + self + end + + def validate!(options) options.each do |k, v| raise ArgumentError, "#{k} is not a valid configuration" unless CONFIG_ATTRS.include?(k) case k when :retries raise ArgumentError, "#{k} must be positive integer" unless v.is_a?(Integer) && v.positive? - when :time_to_sleep - raise ArgumentError, "#{k} must be positive number" unless (v.is_a?(Integer) || v.is_a?(Float)) && v >= 0 when :retriable raise ArgumentError, "#{k} must be array of retriable errors" unless v.is_a?(Array) + when :backoff_intervals + raise ArgumentError, "#{k} must be array of retriable errors" unless v.is_a?(Array) + raise ArgumentError, "#{k} size must be greater or equal to number of retries" unless v.size >= retries when :retry_proc, :retry_condition_proc raise ArgumentError, "#{k} must be Proc" unless v.is_a?(Proc) - when :backoff_setup - available_types = [:constant, :linear, :fibonacci, :exponential] - raise ArgumentError, 'Incorrect backoff type' unless available_types.include?(v[:type]) end - yield(k, v) if block_given? end - end - - def setter - ->(key, value) { - if key == :backoff_setup - assign_backoff_intervals(value) - else - public_send("#{key}=", value) - end - } - end - - def assign_backoff_intervals(backoff_setup) - @backoff_intervals = Backoff.new(backoff_setup[:type], backoff_setup[:start]).intervals end end end