class Toiler::Aws::Queue

SQS Queue abstraction Provides methods for querying and acting on a SQS queue

Attributes

client[RW]
name[RW]
url[RW]

Public Class Methods

new(name, client = nil) click to toggle source
# File lib/toiler/aws/queue.rb, line 10
def initialize(name, client = nil)
  @name   = name
  @client = client || ::Aws::SQS::Client.new
  @url    = client.get_queue_url(queue_name: name).queue_url
end

Public Instance Methods

delete_messages(options) click to toggle source
# File lib/toiler/aws/queue.rb, line 23
def delete_messages(options)
  client.delete_message_batch options.merge queue_url: url
end
receive_messages(options) click to toggle source
# File lib/toiler/aws/queue.rb, line 37
def receive_messages(options)
  client.receive_message(options.merge(queue_url: url))
    .messages
    .map { |m| Message.new(client, url, m) }
end
send_message(options) click to toggle source
# File lib/toiler/aws/queue.rb, line 27
def send_message(options)
  client.send_message sanitize_message_body options.merge queue_url: url
end
send_messages(options) click to toggle source
# File lib/toiler/aws/queue.rb, line 31
def send_messages(options)
  client.send_message_batch(
    sanitize_message_body options.merge queue_url: url
  )
end
visibility_timeout() click to toggle source
# File lib/toiler/aws/queue.rb, line 16
def visibility_timeout
  client.get_queue_attributes(
    queue_url: url,
    attribute_names: ['VisibilityTimeout']
  ).attributes['VisibilityTimeout'].to_i
end

Private Instance Methods

sanitize_message_body(options) click to toggle source
# File lib/toiler/aws/queue.rb, line 45
def sanitize_message_body(options)
  messages = options[:entries] || [options]

  messages.each do |m|
    body = m[:message_body]
    if body.is_a?(Hash)
      m[:message_body] = JSON.dump(body)
    elsif !body.is_a? String
      fail ArgumentError, "Body must be a String, found #{body.class}"
    end
  end

  options
end