Class: Realm::SNS::Gateway::QueueManager
- Inherits:
-
Object
- Object
- Realm::SNS::Gateway::QueueManager
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
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
|