class Realm::SNS::Gateway::QueueManager

Constants

CleanupWithoutPrefix

Public Class Methods

new(prefix: nil, sqs: Aws::SQS::Resource.new) click to toggle source
# File lib/realm/sns/gateway/queue_manager.rb, line 17
def initialize(prefix: nil, sqs: Aws::SQS::Resource.new)
  @prefix = prefix
  @sqs = sqs
end

Public Instance Methods

cleanup(except: []) click to toggle source
# File lib/realm/sns/gateway/queue_manager.rb, line 41
def cleanup(except: [])
  raise CleanupWithoutPrefix unless @prefix

  except_urls = Array(except).map(&:url)
  @sqs.queues(queue_name_prefix: @prefix).each do |queue|
    next if except_urls.include?(queue.url)

    queue.delete if QueueAdapter.new(queue).empty?
  end
end
create(queue_name) click to toggle source
# File lib/realm/sns/gateway/queue_manager.rb, line 28
def create(queue_name)
  name = prefix_name(queue_name)
  raise QueueNameTooLong, name if name.size > 80

  QueueAdapter.new(@sqs.create_queue(queue_name: name))
end
get(name: nil, arn: nil) click to toggle source
# File lib/realm/sns/gateway/queue_manager.rb, line 22
def get(name: nil, arn: nil)
  throw ArgumentError, 'You have to provide name or arn of the queue' unless name || arn

  QueueAdapter.new(@sqs.get_queue_by_name(queue_name: name ? prefix_name(name) : arn.split(':')[-1]))
end
provide(queue_name) click to toggle source
# File lib/realm/sns/gateway/queue_manager.rb, line 35
def provide(queue_name)
  get(name: queue_name)
rescue Aws::SQS::Errors::NonExistentQueue
  create(queue_name)
end

Private Instance Methods

prefix_name(name) click to toggle source
# File lib/realm/sns/gateway/queue_manager.rb, line 54
def prefix_name(name)
  [@prefix, name].compact.join('-')
end