module Sidekiq::Rescue::DSL::ClassMethods

def sidekiq_rescue(error, delay: nil, limit: nil)

Raises:
  • (ArgumentError) - if limit is not an Integer
  • (ArgumentError) - if delay is not an Integer or Float
  • (ArgumentError) - if error is not an array of StandardError
  • (ArgumentError) - if error is not a StandardError

Returns:
  • (void) -

Parameters:
  • limit (Integer) -- The maximum number of retries.
  • delay (Integer) -- The delay in seconds before retrying the job.
  • error (Array) -- The error classes to rescue.
  • error (StandardError) -- The error class to rescue.
def sidekiq_rescue(error, delay: nil, limit: nil)
  validate_error_argument(error)
  validate_delay_argument(delay)
  validate_limit_argument(limit)
  self.sidekiq_rescue_options = {
    error: error,
    delay: delay || Sidekiq::Rescue.config.delay,
    limit: limit || Sidekiq::Rescue.config.limit
  }
end

def validate_delay_argument(delay)

def validate_delay_argument(delay)
  return unless delay && !delay.is_a?(Integer) && !delay.is_a?(Float)
  raise ArgumentError,
        "delay must be integer or float"
end

def validate_error_argument(error)

def validate_error_argument(error)
  error_arg_valid = if error.is_a?(Array)
                      error.all? { |e| e < StandardError }
                    else
                      error < StandardError
                    end
  return if error_arg_valid
  raise ArgumentError,
        "error must be an ancestor of StandardError or an array of ancestors of StandardError"
end

def validate_limit_argument(limit)

def validate_limit_argument(limit)
  raise ArgumentError, "limit must be integer" if limit && !limit.is_a?(Integer)
end