class Propono::AwsClient

Attributes

aws_config[R]

Public Class Methods

new(aws_config) click to toggle source
# File lib/propono/components/aws_client.rb, line 7
def initialize(aws_config)
  @aws_config = aws_config
end

Public Instance Methods

create_queue(name) click to toggle source
# File lib/propono/components/aws_client.rb, line 29
def create_queue(name)
  url = sqs_client.create_queue(queue_name: name).queue_url
  attributes = sqs_client.get_queue_attributes(queue_url: url, attribute_names: ["QueueArn"]).attributes
  Queue.new(url, attributes)
end
create_topic(name) click to toggle source
# File lib/propono/components/aws_client.rb, line 25
def create_topic(name)
  Topic.new(sns_client.create_topic(name: name))
end
delete_from_sqs(queue, receipt_handle) click to toggle source
# File lib/propono/components/aws_client.rb, line 61
def delete_from_sqs(queue, receipt_handle)
  sqs_client.delete_message(
    queue_url: queue.url,
    receipt_handle: receipt_handle
  )
end
publish_to_sns(topic, message) click to toggle source
# File lib/propono/components/aws_client.rb, line 11
def publish_to_sns(topic, message)
  sns_client.publish(
    topic_arn: topic.arn,
    message: message.to_json
  )
end
read_from_sqs(queue, num_messages, long_poll: true, visibility_timeout: nil) click to toggle source
# File lib/propono/components/aws_client.rb, line 50
def read_from_sqs(queue, num_messages, long_poll: true, visibility_timeout: nil)
  wait_time_seconds = long_poll ? 20 : 0
  visibility_timeout ||= 30
  sqs_client.receive_message(
    queue_url: queue.url,
    wait_time_seconds: wait_time_seconds,
    max_number_of_messages: num_messages,
    visibility_timeout: visibility_timeout
  ).messages
end
send_to_sqs(queue, message) click to toggle source
# File lib/propono/components/aws_client.rb, line 18
def send_to_sqs(queue, message)
  sqs_client.send_message(
    queue_url: queue.url,
    message_body: message
  )
end
set_sqs_policy(queue, policy) click to toggle source
# File lib/propono/components/aws_client.rb, line 43
def set_sqs_policy(queue, policy)
  sqs_client.set_queue_attributes(
    queue_url: queue.url,
    attributes: { Policy: policy }
  )
end
subscribe_sqs_to_sns(queue, topic) click to toggle source
# File lib/propono/components/aws_client.rb, line 35
def subscribe_sqs_to_sns(queue, topic)
  sns_client.subscribe(
    topic_arn: topic.arn,
    protocol: 'sqs',
    endpoint: queue.arn
  )
end

Private Instance Methods

sns_client() click to toggle source
# File lib/propono/components/aws_client.rb, line 70
def sns_client
  @sns_client ||= Aws::SNS::Client.new(aws_config.sns_options)
end
sqs_client() click to toggle source
# File lib/propono/components/aws_client.rb, line 74
def sqs_client
  @sqs_client ||= Aws::SQS::Client.new(aws_config.sqs_options)
end