class Aws::Broker::Subscriber

Public Class Methods

new(topic, queue=nil) click to toggle source
# File lib/aws/broker/subscriber.rb, line 7
def initialize(topic, queue=nil)
  @topic = topic
  @queue = queue || queue_name
end

Public Instance Methods

subscribe() click to toggle source
# File lib/aws/broker/subscriber.rb, line 12
def subscribe
  return unless enabled?
  create_queue
  find_queue_arn
  create_topic
  sns.subscribe(
    topic_arn: @topic_arn,
    protocol:  'sqs',
    endpoint:  @queue_arn
  )
  set_queue_policy
end

Private Instance Methods

config() click to toggle source
# File lib/aws/broker/subscriber.rb, line 80
def config
  Broker.config
end
create_queue() click to toggle source
# File lib/aws/broker/subscriber.rb, line 31
def create_queue
  @queue_url = sqs.create_queue(
    queue_name: @queue
  ).queue_url
end
find_queue_arn() click to toggle source
# File lib/aws/broker/subscriber.rb, line 37
def find_queue_arn
  @queue_arn = sqs.get_queue_attributes(
    queue_url:       @queue_url,
    attribute_names: ['QueueArn']
  ).attributes['QueueArn']
end
policy() click to toggle source
# File lib/aws/broker/subscriber.rb, line 51
      def policy
        <<-POLICY
          {
            "Version": "2008-10-17",
            "Id": "#{@queue_arn}/SQSDefaultPolicy",
            "Statement": [
              {
                "Sid": "#{@queue_arn}-Sid",
                "Effect": "Allow",
                "Principal": {
                  "AWS": "*"
                },
                "Action": "SQS:*",
                "Resource": "#{@queue_arn}",
                "Condition": {
                  "StringEquals": {
                    "aws:SourceArn": "#{@topic_arn}"
                  }
                }
              }
            ]
          }
        POLICY
      end
queue_name() click to toggle source
# File lib/aws/broker/subscriber.rb, line 27
def queue_name
  naming.queue(@topic)
end
set_queue_policy() click to toggle source
# File lib/aws/broker/subscriber.rb, line 44
def set_queue_policy
  sqs.set_queue_attributes(
    queue_url:  @queue_url,
    attributes: { 'Policy': policy }
  )
end
sqs() click to toggle source
# File lib/aws/broker/subscriber.rb, line 76
def sqs
  config.sqs
end