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