class MyJohnDeereApi::NetHttpRetry::Decorator
Constants
- DEFAULTS
Attributes
max_retries[R]
object[R]
request_methods[R]
retry_codes[R]
retry_delay_exponent[R]
valid_codes[R]
Public Class Methods
new(object, options={})
click to toggle source
# File lib/my_john_deere_api/net_http_retry/decorator.rb, line 14 def initialize(object, options={}) @object = object # options that can be used as-is [:request_methods, :retry_delay_exponent, :max_retries, :retry_codes, :valid_codes].each do |option| instance_variable_set(:"@#{option}", options[option] || DEFAULTS[option]) end # options that require casting as integer arrays [:retry_codes, :valid_codes].each do |option| instance_variable_set(:"@#{option}", (options[option] || DEFAULTS[option]).map(&:to_i)) end end
Public Instance Methods
request(method_name, *args)
click to toggle source
# File lib/my_john_deere_api/net_http_retry/decorator.rb, line 28 def request(method_name, *args) retries = 0 result = object.send(method_name, *args) while retry_codes.include?(result.status) if retries >= max_retries raise MaxRetriesExceededError.new(method_name, "#{result.status} #{result.response.reason_phrase}") end delay = [result.headers['retry-after'].to_i, retry_delay_exponent ** retries].max sleep(delay) result = object.send(method_name, *args) retries += 1 end unless valid_codes.include?(result.status) raise InvalidResponseError.new(result) end result end
Private Instance Methods
method_missing(method_name, *args, &block)
click to toggle source
# File lib/my_john_deere_api/net_http_retry/decorator.rb, line 52 def method_missing(method_name, *args, &block) if request_methods.include?(method_name) request(method_name, *args) else object.send(method_name, *args, &block) end end