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.
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
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
|