Class: Realm::SNS::Gateway::QueueManager

Inherits:
Object
  • Object
show all
Defined in:
lib/realm/sns/gateway/queue_manager.rb

Defined Under Namespace

Classes: QueueNameTooLong

Constant Summary collapse

CleanupWithoutPrefix =
Realm::Error[
'Cleaning up queues without prefix is not allowed, it can lead to deleting queues from other apps']

Instance Method Summary collapse

Constructor Details

#initialize(prefix: nil, sqs: Aws::SQS::Resource.new) ⇒ QueueManager

Returns a new instance of QueueManager.



17
18
19
20
# File 'lib/realm/sns/gateway/queue_manager.rb', line 17

def initialize(prefix: nil, sqs: Aws::SQS::Resource.new)
  @prefix = prefix
  @sqs = sqs
end

Instance Method Details

#cleanup(except: []) ⇒ Object



41
42
43
44
45
46
47
48
49
50
# 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) ⇒ Object

Raises:



28
29
30
31
32
33
# 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) ⇒ Object



22
23
24
25
26
# 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) ⇒ Object



35
36
37
38
39
# 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