module Sidekiq::Rescue::Dsl::ClassMethods

def assign_sidekiq_rescue_options(errors:, delay:, limit:, jitter:)

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

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

Raises:
  • (ArgumentError) - if jitter is not an Integer or Float
  • (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,
                   jitter: Sidekiq::Rescue.config.jitter)
  unpacked_errors = validate_and_unpack_error_argument(errors)
  validate_delay_argument(delay)
  validate_limit_argument(limit)
  validate_jitter_argument(jitter)
  assign_sidekiq_rescue_options(errors: unpacked_errors, delay: delay, limit: limit, jitter: jitter)
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.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_jitter_argument(jitter)

def validate_jitter_argument(jitter)
  return if jitter.is_a?(Integer) || jitter.is_a?(Float)
  raise ArgumentError,
        "jitter must be integer or float"
end

def validate_limit_argument(limit)

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