Sha256: 143d804dd940c79bedb582d801ee1a3f5fa71821be48877c54832fd45c181783

Contents?: true

Size: 1.75 KB

Versions: 10

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

module Eventboss
  class NotConfigured < StandardError;
  end

  class SnsClient
    def initialize(configuration)
      @configuration = configuration
    end

    def publish(payload)
      backend.publish(payload)
    end

    def create_topic(name:)
      backend.create_topic(name: name)
    end

    def create_subscription(topic_arn:, queue_arn:)
      subscription = backend.subscribe(
        topic_arn: topic_arn,
        endpoint: queue_arn,
        protocol: 'sqs'
      )
      set_raw_message_delivery(subscription)
    end

    private

    attr_reader :configuration

    def set_raw_message_delivery(subscription)
      backend.set_subscription_attributes(
        subscription_arn: subscription.subscription_arn,
        attribute_name: 'RawMessageDelivery',
        attribute_value: 'true'
      )
    end

    def backend
      if configured?
        options = {
          region: configuration.eventboss_region,
          credentials: ::Aws::Credentials.new(
            configuration.aws_access_key_id,
            configuration.aws_secret_access_key
          )
        }
        if configuration.aws_sns_endpoint
          options[:endpoint] = configuration.aws_sns_endpoint
        end

        Aws::SNS::Client.new(options)
      elsif configuration.raise_on_missing_configuration
        raise NotConfigured, 'Eventboss is not configured.'
      else
        Mock.new
      end
    end

    def configured?
      !!(
        configuration.eventboss_region &&
        configuration.eventboss_account_id &&
        configuration.eventboss_app_name
      )
    end

    class Mock
      def publish(_)
        Eventboss.logger.info('Eventboss is not configured. Skipping message publishing!')
        return
      end
    end
  end

end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
eventboss-1.9.0 lib/eventboss/sns_client.rb
eventboss-1.8.1 lib/eventboss/sns_client.rb
eventboss-1.8.0 lib/eventboss/sns_client.rb
eventboss-1.7.0 lib/eventboss/sns_client.rb
eventboss-1.5.0 lib/eventboss/sns_client.rb
eventboss-1.4.1 lib/eventboss/sns_client.rb
eventboss-1.3.5 lib/eventboss/sns_client.rb
eventboss-1.3.4 lib/eventboss/sns_client.rb
eventboss-1.3.3 lib/eventboss/sns_client.rb
eventboss-1.3.2 lib/eventboss/sns_client.rb