Sha256: 3178e9214f060e49a52436327d3891b9661cc6b48523b82d58849b037a3e5334

Contents?: true

Size: 1.67 KB

Versions: 3

Compression:

Stored size: 1.67 KB

Contents

module NulogyMessageBusProducer
  # Configuration for the gem
  # This is a private class, so do not use it directly. Use the methods on NulogyMessageBusProducer.
  class Config
    FAILURE_MODES = [:raise, :soft_fail].freeze

    attr_reader :registered_schemas

    def initialize(options = {})
      @registered_schemas = {}
      producing_events_fails_with(:raise)

      update(options)
    end

    def register_schema(schema:, key:)
      @registered_schemas[key] = schema
    end

    def producing_events_fails_with(mode, &block)
      @event_error_handler =
        case mode
        when :raise
          method(:raise_handler)
        when :soft_fail
          block || ->(_) {}
        else
          unknown_mode_error(mode)
        end
    end

    def handle_event_generation_error(subscription_id:, context:, variables:, result:)
      @event_error_handler.call(
        subscription_id: subscription_id,
        context: context,
        variables: variables,
        result: result
      )
    end

    def update(options = {})
      options.each { |key, value| public_send("#{key}=", value) }
    end

    private

    def raise_handler(subscription_id:, context:, variables:, result:)
      raise StandardError, <<~MESSAGE
        A subscription event could not be produced for subscription #{subscription_id}

        The GraphQL engine returned this response:

        #{result.to_h}

        context: #{context.inspect}
        variables: #{variables.inspect}
      MESSAGE
    end

    def unknown_mode_error(mode)
      options = FAILURE_MODES.map(&:inspect).join(", ")

      raise ArgumentError, "The failure mode `#{mode}` is not valid. The modes are: #{options}."
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
nulogy_message_bus_producer-2.1.1 lib/nulogy_message_bus_producer/config.rb
nulogy_message_bus_producer-2.1.0 lib/nulogy_message_bus_producer/config.rb
nulogy_message_bus_producer-2.0.0 lib/nulogy_message_bus_producer/config.rb