class Circuitry::Provisioning::SubscriptionCreator
Attributes
queue[RW]
topics[RW]
Public Class Methods
new(queue, topics)
click to toggle source
# File lib/circuitry/provisioning/subscription_creator.rb, line 17 def initialize(queue, topics) raise ArgumentError, 'queue must be a Circuitry::Queue' unless queue.is_a?(Circuitry::Queue) raise ArgumentError, 'topics must be an array' unless topics.is_a?(Array) self.queue = queue self.topics = topics end
subscribe_all(queue, topics)
click to toggle source
# File lib/circuitry/provisioning/subscription_creator.rb, line 13 def self.subscribe_all(queue, topics) new(queue, topics).subscribe_all end
Public Instance Methods
subscribe_all()
click to toggle source
# File lib/circuitry/provisioning/subscription_creator.rb, line 25 def subscribe_all topics.each do |topic| sns.subscribe(topic_arn: topic.arn, endpoint: queue.arn, protocol: 'sqs') end if topics.any? sqs.set_queue_attributes(queue_url: queue.url, attributes: build_policy) end end
Private Instance Methods
build_policy()
click to toggle source
# File lib/circuitry/provisioning/subscription_creator.rb, line 40 def build_policy # The aws ruby SDK doesn't have a policy builder :{ { 'Policy' => { 'Version' => '2012-10-17', 'Id' => "#{queue.arn}/SNSPolicy", 'Statement' => [build_policy_statement] }.to_json } end
build_policy_statement()
click to toggle source
# File lib/circuitry/provisioning/subscription_creator.rb, line 51 def build_policy_statement { 'Sid' => "Sid-#{queue.name}-subscriptions", 'Effect' => 'Allow', 'Principal' => { 'AWS' => '*' }, 'Action' => 'SQS:SendMessage', 'Resource' => queue.arn, 'Condition' => { 'ForAnyValue:ArnEquals' => { 'aws:SourceArn' => topics.map(&:arn) } } } end