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
- .configure(configuration, retry_options = nil) ⇒ Object
- .header(headers, name) ⇒ Object
- .replayable_body?(body) ⇒ Boolean
- .retryable_request?(env) ⇒ Boolean
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, = nil) = || RetryOptions.new configuration.request(:retry, .) 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
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
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 |