Sha256: 89973a04ab21a3e01771dcd44a607ade289907c59e1197fab4d9ce0d6f2a2fde

Contents?: true

Size: 1.43 KB

Versions: 6

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true

require 'aws-sdk-sns'
require 'json'

module HermesMessengerOfTheGods
  module Endpoints
    class Sns < Base
      def sns_client
        HermesMessengerOfTheGods.configuration.sns_client
      end

      def to_transmit_payload(message, raw_message, dispatch_options = {})
        pub_opts = fetch_option(:publish_options, raw_message) || {}

        message = JSON.dump(message) if options[:jsonify]

        pub_opts.merge(dispatch_options, message: message)
      end

      def transmit(payload)
        bulk_transmit([payload])
      end

      def bulk_transmit(payloads)
        # Batch Publish requires a message id, so we'll generate one if it's not set
        all_publish_batch_request_entries = payloads.map do |payload|
          {id: SecureRandom.uuid}.merge(payload)
        end

        failed_msgs = []

        all_publish_batch_request_entries.each_slice(10) do |publish_batch_request_entries|
          resp = sns_client.publish_batch(topic_arn: endpoint, publish_batch_request_entries: publish_batch_request_entries)
          failed_msgs.concat(resp.failed)
        end

        if failed_msgs.any?
          all_sender_fault = failed_msgs.all?(&:sender_fault)
          raise  FatalError, "Error in dispatching: #{failed_msgs[0].message}" if all_sender_fault

          raise "Some messages failed to send due to recoverable error #{failed_msgs[0].message}"
        end

        true
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
hermes_messenger_of_the_gods-3.0.1 lib/hermes_messenger_of_the_gods/endpoints/sns.rb
hermes_messenger_of_the_gods-3.0.0 lib/hermes_messenger_of_the_gods/endpoints/sns.rb
hermes_messenger_of_the_gods-3.0.0.rc5 lib/hermes_messenger_of_the_gods/endpoints/sns.rb
hermes_messenger_of_the_gods-3.0.0.rc4 lib/hermes_messenger_of_the_gods/endpoints/sns.rb
hermes_messenger_of_the_gods-3.0.0.rc3 lib/hermes_messenger_of_the_gods/endpoints/sns.rb
hermes_messenger_of_the_gods-3.0.0.rc2 lib/hermes_messenger_of_the_gods/endpoints/sns.rb