Module: Sendmux::Core::Retry

Defined in:
lib/sendmux/core/retry.rb

Constant Summary collapse

SAFE_METHODS =
%w[GET HEAD OPTIONS].freeze

Class Method Summary collapse

Class Method Details

.configure(configuration, retry_options = nil) ⇒ Object



10
11
12
13
# File 'lib/sendmux/core/retry.rb', line 10

def self.configure(configuration, retry_options = nil)
  options = retry_options || RetryOptions.new
  configuration.request(:retry, options.to_faraday_options)
end

.header(headers, name) ⇒ Object



22
23
24
# File 'lib/sendmux/core/retry.rb', line 22

def self.header(headers, name)
  headers.find { |key, _value| key.to_s.downcase == name.downcase }&.last
end

.replayable_body?(body) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/sendmux/core/retry.rb', line 26

def self.replayable_body?(body)
  body.nil? || body.is_a?(String) || body.respond_to?(:rewind)
end

.retryable_request?(env) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
18
19
20
# File 'lib/sendmux/core/retry.rb', line 15

def self.retryable_request?(env)
  method = env[:method].to_s.upcase
  return true if SAFE_METHODS.include?(method)

  method == 'POST' && header(env[:request_headers] || {}, 'Idempotency-Key') && replayable_body?(env[:body])
end