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.



21
22
23
24
# File 'lib/realm/sns/gateway/queue_manager.rb', line 21

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

Instance Method Details

#cleanup(except: []) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/realm/sns/gateway/queue_manager.rb', line 45

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:



32
33
34
35
36
37
# File 'lib/realm/sns/gateway/queue_manager.rb', line 32

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



26
27
28
29
30
# File 'lib/realm/sns/gateway/queue_manager.rb', line 26

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



39
40
41
42
43
# File 'lib/realm/sns/gateway/queue_manager.rb', line 39

def provide(queue_name)
  get(name: queue_name)
rescue Aws::SQS::Errors::NonExistentQueue
  create(queue_name)
end