module Retriable
Name:
retriable.rb
Created by: GaddyGaddy
Description:
Public Class Methods
set_test_mode()
click to toggle source
# File lib/utils/retriable.rb, line 58 def self.set_test_mode @@test_mode = true end
Public Instance Methods
extract_options(array)
click to toggle source
# File lib/utils/retriable.rb, line 54 def extract_options(array) array.last.is_a?(::Hash) ? array.pop : {} end
with_retries(*args) { || ... }
click to toggle source
This will catch any exception and retry twice (three tries total):
with_retries { ... }
This will catch any exception and retry four times (five tries total):
with_retries(:limit => 5) { ... }
This will catch a specific exception and retry once (two tries total):
with_retries(Some::Error, :limit => 2) { ... }
You can also sleep inbetween tries. This is helpful if you’re hoping that some external service recovers from its issues.
with_retries(Service::Error, :sleep => 1) { ... }
# File lib/utils/retriable.rb, line 29 def with_retries(*args, &block) options = extract_options args exceptions = args options[:limit] ||= 3 options[:limit] = 0 if @@test_mode options[:sleep] ||= 0 exceptions = [Exception] if exceptions.empty? retried = 0 begin yield rescue *exceptions => e logger.warn "Could not do command, will retry. Error message is #{e.inspect.to_s}" if retried + 1 < options[:limit] retried += 1 sleep options[:sleep] retry else raise e end end end