Sha256: c0e1e630306d4be128a6d68d298e4567b08b7c84a64342705b32ce165023f213

Contents?: true

Size: 1.44 KB

Versions: 16

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module Karafka
  module Routing
    module Features
      class DeadLetterQueue < Base
        # This feature validation contracts
        module Contracts
          # Rules around dead letter queue settings
          class Topic < Karafka::Contracts::Base
            configure do |config|
              config.error_messages = YAML.safe_load(
                File.read(
                  File.join(Karafka.gem_root, 'config', 'locales', 'errors.yml')
                )
              ).fetch('en').fetch('validations').fetch('topic')
            end

            nested :dead_letter_queue do
              required(:active) { |val| [true, false].include?(val) }
              required(:max_retries) { |val| val.is_a?(Integer) && val >= 0 }
            end

            # Validate topic name only if dlq is active
            virtual do |data, errors|
              next unless errors.empty?

              dead_letter_queue = data[:dead_letter_queue]

              next unless dead_letter_queue[:active]

              topic = dead_letter_queue[:topic]
              topic_regexp = ::Karafka::Contracts::TOPIC_REGEXP

              # When topic is set to false, it means we just want to skip dispatch on DLQ
              next if topic == false
              next if topic.is_a?(String) && topic_regexp.match?(topic)

              [[%i[dead_letter_queue topic], :format]]
            end
          end
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
karafka-2.2.14 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.13 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.12 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.11 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.10 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.9 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.8 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.8.beta1 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.7 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.6 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.5 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.4 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.3 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.2 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.1 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb
karafka-2.2.0 lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb