module RetryIt

Constants

DEFAULT_EXCEPTIONS
DEFAULT_TIMEOUT_S
MAX_RUNS
VERSION

Public Instance Methods

retry_it(max_runs: MAX_RUNS, errors: DEFAULT_EXCEPTIONS, on_error: nil, timeout: DEFAULT_TIMEOUT_S, should_retry_proc: nil, logger: nil) { || ... } click to toggle source
# File lib/retry_it.rb, line 8
def retry_it(max_runs: MAX_RUNS,
             errors: DEFAULT_EXCEPTIONS,
             on_error: nil,
             timeout: DEFAULT_TIMEOUT_S,
             should_retry_proc: nil,
             logger: nil)
  retries = 0
  begin
    yield
  rescue *errors => e
    retries += 1
    should_retry_proc_result = should_retry_proc.respond_to?(:call) ? should_retry_proc.call(e) : true

    if retries < max_runs && should_retry_proc_result
      if logger
        logger.info "Error (#{e.class}), retrying ##{retries} of #{max_runs}. Sleeping for #{timeout}"
      end

      on_error.call(e) if on_error && on_error.respond_to?(:call)
      sleep timeout if timeout > 0

      retry
    else
      raise
    end
  end
end