Sha256: 9695f41bd9a9e6af576313302628c616e01bb8596eb2c5a186e4d5f82308d908

Contents?: true

Size: 1.56 KB

Versions: 16

Compression:

Stored size: 1.56 KB

Contents

module NulogyMessageBusProducer
  module Subscriptions
    # A custom validator that checks that the provided (or all) subscriptions have a query that is valid for its
    # configured schema. Schemas must be registered with a `schema_key`, that is persisted in the database.
    # It ties the subscription to a particular schema.
    #
    # This validator is run as part of an initializer as a last ditch effort to verify that the stored queries in the
    # database are valid against the deployed schema, so that when events are generated in the system, they are always
    # sucessfully created.
    class QueryValidator
      attr_reader :errors

      def initialize
        @errors = []
      end

      def validate(subscription_or_subscriptions = NulogyMessageBusProducer::SelfServeSubscription.all)
        Array(subscription_or_subscriptions).each do |subscription|
          schema = find_schema(subscription)
          next unless schema

          gql_errors = schema.validate(subscription.query)
          errors = gql_errors.map { |e| "#{e.message} #{display_id(subscription.id)}" }

          @errors.concat(errors)
        end

        @errors.empty?
      end

      private

      def find_schema(subscription)
        NulogyMessageBusProducer.resolve_schema(subscription.schema_key) do
          @errors << "Could not find a schema for schema_key '#{subscription.schema_key}' #{display_id(subscription.id)}"
          nil
        end
      end

      def display_id(id)
        normalized = id.presence || "<new_record>"

        "(id: #{normalized})"
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
nulogy_message_bus_producer-5.0.8 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-5.0.7 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-5.0.6 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-5.0.5 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-5.0.4 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-5.0.3 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-5.0.2 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-5.0.1 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-5.0.1.alpha lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-5.0.0 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-4.0.0 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-3.7.0 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-3.6.0 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-3.5.0 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-4.0.0.alpha lib/nulogy_message_bus_producer/subscriptions/query_validator.rb
nulogy_message_bus_producer-3.4.1 lib/nulogy_message_bus_producer/subscriptions/query_validator.rb