Skip to content

Commit 72bbdf4

Browse files
Merge branch 'BranchIntl-delete_queue_if_unused_if_empty'
2 parents 74a5f33 + 3addf94 commit 72bbdf4

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

lib/rabbitmq/http/client.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,12 @@ def declare_queue(vhost, name, attributes)
177177
decode_resource(response)
178178
end
179179

180-
def delete_queue(vhost, name)
181-
decode_resource(@connection.delete("queues/#{encode_uri_path_segment(vhost)}/#{encode_uri_path_segment(name)}"))
180+
def delete_queue(vhost, name, if_unused = false, if_empty = false)
181+
response = @connection.delete("queues/#{encode_uri_path_segment(vhost)}/#{encode_uri_path_segment(name)}") do |req|
182+
req.params["if-unused"] = true if if_unused
183+
req.params["if-empty"] = true if if_empty
184+
end
185+
decode_resource(response)
182186
end
183187

184188
def list_queue_bindings(vhost, queue, query = {})

lib/rabbitmq/http/client/response_helper.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,13 @@ def decode_response_body(body)
3131
def decode_resource_collection(response)
3232
collection = response.body.is_a?(Array) ? response.body : response.body.fetch('items')
3333

34-
collection.map { |i| Hashie::Mash.new(i) }
34+
collection.map do |i|
35+
if i == []
36+
Hashie::Mash.new()
37+
else
38+
Hashie::Mash.new(i)
39+
end
40+
end
3541
end
3642
end
3743
end

spec/integration/api_endpoints_spec.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,35 @@ def await_event_propagation
505505
it "deletes a queue" do
506506
q = @channel.queue(queue_name, durable: false)
507507
subject.delete_queue("/", queue_name)
508+
expect { subject.queue_info("/", queue_name) }.to raise_error(Faraday::ResourceNotFound)
509+
end
510+
511+
it "doesn't delete non-empty queue if if-empty is set" do
512+
q = @channel.queue(queue_name, durable: false)
513+
q.publish("hello")
514+
expect do
515+
subject.delete_queue("/", queue_name, false, true)
516+
end.to raise_error(Faraday::ClientError)
517+
518+
subject.purge_queue("/", q.name)
519+
subject.delete_queue("/", queue_name, false, true)
520+
expect { subject.queue_info("/", queue_name) }.to raise_error(Faraday::ResourceNotFound)
521+
end
522+
523+
it "doesn't delete used queue if if-unused is set" do
524+
q = @channel.queue(queue_name, durable: false)
525+
# Simulate the queue being used by creating a consumer
526+
consumer = q.subscribe do |_delivery_info, _properties, _body|
527+
# consumer block
528+
end
529+
530+
expect do
531+
subject.delete_queue("/", queue_name, true, false)
532+
end.to raise_error(Faraday::ClientError)
533+
534+
consumer.cancel
535+
subject.delete_queue("/", queue_name, true, false)
536+
expect { subject.queue_info("/", queue_name) }.to raise_error(Faraday::ResourceNotFound)
508537
end
509538
end
510539

0 commit comments

Comments
 (0)