lib/sidekiq/rescue/config.rb



# frozen_string_literal: true

module Sidekiq
  module Rescue
    # Config class is used to store the configuration of Sidekiq::Rescue
    # and to allow to configure it.
    class Config
      DEFAULTS = {
        delay: 60,
        limit: 10
      }.freeze

      def initialize
        @delay = DEFAULTS[:delay]
        @limit = DEFAULTS[:limit]
        @logger = Sidekiq.logger
      end

      # Delay in seconds before retrying the job.
      # @return [Integer, Float]
      attr_reader :delay

      # @param delay [Integer, Float] The delay in seconds before retrying the job.
      # @return [void]
      # @raise [ArgumentError] if delay is not an Integer or Float
      def delay=(delay)
        raise ArgumentError, "delay must be an Integer or Float" unless delay.is_a?(Integer) || delay.is_a?(Float)

        @delay = delay
      end

      # The maximum number of retries.
      # @return [Integer]
      attr_reader :limit

      # @param limit [Integer] The maximum number of retries.
      # @return [void]
      # @raise [ArgumentError] if limit is not an Integer
      def limit=(limit)
        raise ArgumentError, "limit must be an Integer" unless limit.is_a?(Integer)

        @limit = limit
      end

      # The logger instance.
      # @return [Logger]
      # @note The default logger is Sidekiq's logger.
      attr_reader :logger

      # @param logger [Logger] The logger instance.
      # @return [void]
      # @raise [ArgumentError] if logger is not a Logger
      def logger=(logger)
        raise ArgumentError, "logger must be a Logger" if !logger.nil? && !logger.respond_to?(:info)

        @logger = logger
      end
    end
  end
end