class Realm::SNS::Gateway::TopicAdapter

Provides cleaner SDK over Aws::SNS::Topic

Public Class Methods

new(topic_or_arn) click to toggle source
# File lib/realm/sns/gateway/topic_adapter.rb, line 14
def initialize(topic_or_arn)
  @topic = topic_or_arn.is_a?(Aws::SNS::Topic) ? topic_or_arn : Aws::SNS::Resource.new.topic(topic_or_arn)
end

Public Instance Methods

publish(event_type, message) click to toggle source
# File lib/realm/sns/gateway/topic_adapter.rb, line 18
def publish(event_type, message)
  @topic.publish(
    message: message,
    message_attributes: { 'event_type' => { data_type: 'String', string_value: event_type.to_s } },
  )
end
subscribe(event_type, queue) click to toggle source
# File lib/realm/sns/gateway/topic_adapter.rb, line 25
def subscribe(event_type, queue)
  queue.allow_send_messages(@topic.arn)
  attributes = subscribe_attributes(event_type)
  @topic.subscribe(protocol: 'sqs', endpoint: queue.arn, attributes: attributes)
rescue Aws::SNS::Errors::InvalidParameter
  raise SubscriptionError.new(queue.arn, attributes)
end

Private Instance Methods

subscribe_attributes(event_type) click to toggle source
# File lib/realm/sns/gateway/topic_adapter.rb, line 35
def subscribe_attributes(event_type)
  attrs = { 'RawMessageDelivery' => true }
  attrs['FilterPolicy'] = { 'event_type' => [event_type] } unless event_type == :any
  attrs.transform_values(&:to_json)
end