Sha256: 4250c04bdba7512a181fcfe394197ae0a71f175a3fff4ec98b5cf707f553c6b9

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

# frozen_string_literal: true

require 'aws-sdk-sns'
require_relative 'abstract/client'

module CycloneLariat
  class SnsClient < Abstract::Client
    include LunaPark::Extensions::Injector

    dependency(:aws_client_class) { Aws::SNS::Client }

    SNS_SUFFIX = :fanout

    def publish(msg, topic: nil)
      topic ||= get_topic(msg.kind, msg.type)
      arn     = get_arn(topic)
      aws_client.publish(topic_arn: arn, message: msg.to_json)
    end

    def publish_event(type, data: {}, version: self.version, uuid: SecureRandom.uuid, topic: nil)
      publish event(type, data: data, version: version, uuid: uuid), topic: topic
    end

    def publish_command(type, data: {}, version: self.version, uuid: SecureRandom.uuid, topic: nil)
      publish command(type, data: data, version: version, uuid: uuid), topic: topic
    end

    private

    def get_arn(topic)
      ['arn', 'aws', 'sns', region, client_id, topic].join ':'
    end

    def get_topic(kind, type)
      [instance, kind, SNS_SUFFIX, publisher, type].join '-'
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cyclone_lariat-0.3.10 lib/cyclone_lariat/sns_client.rb