Sha256: 1e286da06d25f06eefb3a0685fda2b32ad3aa289da80c490e4c019ef0276129e

Contents?: true

Size: 1.39 KB

Versions: 28

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

module Karafka
  module Web
    module Processing
      module Consumers
        # Consumer tracking related contracts
        module Contracts
          # Contract used to ensure the consistency of the data generated to the consumers states
          # topic
          class State < Web::Contracts::Base
            configure

            # Valid schema manager states
            VALID_SCHEMA_STATES = %w[compatible incompatible].freeze

            private_constant :VALID_SCHEMA_STATES

            required(:schema_version) { |val| val.is_a?(String) && !val.empty? }
            required(:dispatched_at) { |val| val.is_a?(Numeric) && val.positive? }
            required(:stats) { |val| val.is_a?(Hash) }
            required(:processes) { |val| val.is_a?(Hash) }
            required(:schema_state) { |val| VALID_SCHEMA_STATES.include?(val) }

            virtual do |data, errors|
              next unless errors.empty?

              Contracts::AggregatedStats.new.validate!(data.fetch(:stats))

              nil
            end

            virtual do |data, errors|
              next unless errors.empty?

              process_contract = Contracts::Process.new

              data.fetch(:processes).each_value do |details|
                process_contract.validate!(details)
              end

              nil
            end
          end
        end
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
karafka-web-0.10.4 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.10.3 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.10.2 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.10.1 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.10.0 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.10.0.rc2 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.10.0.rc1 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.10.0.beta1 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.9.1 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.9.0 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.9.0.rc3 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.9.0.rc2 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.9.0.rc1 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.8.2 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.8.1 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.8.0 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.8.0.rc1 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.7.10 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.7.9 lib/karafka/web/processing/consumers/contracts/state.rb
karafka-web-0.7.8 lib/karafka/web/processing/consumers/contracts/state.rb