module Sidekiq::Rescue::Dsl::ClassMethods

def assign_sidekiq_rescue_options(errors, delay, limit)

def assign_sidekiq_rescue_options(errors, delay, limit)
  self.sidekiq_rescue_options ||= {}
  self.sidekiq_rescue_options = self.sidekiq_rescue_options.merge(errors => { delay: delay, limit: limit })
end

def sidekiq_rescue(*errors, delay: Sidekiq::Rescue.config.delay, limit: Sidekiq::Rescue.config.limit)

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, Float, Proc) -- 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(*errors, delay: Sidekiq::Rescue.config.delay, limit: Sidekiq::Rescue.config.limit)
  unpacked_errors = validate_and_unpack_error_argument(errors)
  validate_delay_argument(delay)
  validate_limit_argument(limit)
  assign_sidekiq_rescue_options(unpacked_errors, delay, limit)
end

def sidekiq_rescue_error_group_with_options_by(exception)

Returns:
  • (Array, Hash) - The error group and options.

Parameters:
  • exception (StandardError) -- The exception to find the error group for.
def sidekiq_rescue_error_group_with_options_by(exception)
  sidekiq_rescue_options.reverse_each.find do |error_group, _options|
    Array(error_group).any? { |error_klass| exception.is_a?(error_klass) }
  end
end

def validate_and_unpack_error_argument(error)

def validate_and_unpack_error_argument(error)
  error_arg_valid = error.any? && error.flatten.all? { |e| e < StandardError } if error.is_a?(Array)
  return error.flatten if error_arg_valid
  raise ArgumentError,
        "error must be an ancestor of StandardError"
end

def validate_delay_argument(delay)

def validate_delay_argument(delay)
  return if delay.nil?
  return if delay.is_a?(Integer) || delay.is_a?(Float)
  if delay.is_a?(Proc)
    raise ArgumentError, "delay proc must accept counter as argument" if delay.arity.zero?
    return
  end
  raise ArgumentError,
        "delay must be integer, float or proc"
end

def validate_limit_argument(limit)

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