Sha256: c00c609783556b3bf56e2995798648dbe249ebb0c3856c631a359f517eca33d2

Contents?: true

Size: 1017 Bytes

Versions: 4

Compression:

Stored size: 1017 Bytes

Contents

module NulogyMessageBusProducer
  # This model saves all subscriptions to external systems.
  # An external system can subscribe to events and specify the shape of data it would like to receive for the event.
  class Subscription < ApplicationRecord
    self.table_name = :message_bus_subscriptions

    # Run our validator with familar syntax in this model
    class ValidForSchemaValidator < ActiveModel::EachValidator
      def validate_each(record, attribute, _value)
        return if record.schema_key.blank? || record.query.blank?

        validator = NulogyMessageBusProducer::SubscriberGraphqlSchemaValidator.new

        validator.validate(record)
        validator.errors.each { |e| record.errors.add(attribute, e) }
      end
    end

    validates :schema_key, :event_type, presence: true
    validates :query, presence: true, valid_for_schema: true

    def self.create_or_update(attrs)
      find_or_initialize_by(id: attrs[:id]).tap do |model|
        model.update!(attrs)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
nulogy_message_bus_producer-3.3.0 lib/nulogy_message_bus_producer/subscription.rb
nulogy_message_bus_producer-3.2.1 lib/nulogy_message_bus_producer/subscription.rb
nulogy_message_bus_producer-3.2.0 lib/nulogy_message_bus_producer/subscription.rb
nulogy_message_bus_producer-3.1.1 lib/nulogy_message_bus_producer/subscription.rb