1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/rackspace/models/queues/queue.rb

73 lines
1.6 KiB
Ruby

require 'fog/core/model'
module Fog
module Rackspace
class Queues
class Queue < Fog::Model
identity :name
def messages
@messages ||= begin
Fog::Rackspace::Queues::Messages.new({
:service => service,
:queue => self,
:client_id => service.client_id,
:echo => true
})
end
end
def stats
service.get_queue_stats(name).body['messages']
end
def claims
@claims ||= begin
Fog::Rackspace::Queues::Claims.new({
:service => service,
:queue => self
})
end
end
#Helper method to enqueue a single message
def enqueue(body, ttl, options = {})
messages.create(options.merge(options.merge({:body => body, :ttl => ttl})))
end
#Helper method to claim (dequeue) a single message, including destroying it
def dequeue(ttl, grace, options = {}, &block)
claim = claims.create(
options.merge(
{
:limit => 1,
:ttl => ttl,
:grace => grace
}))
if claim
message = claim.messages.first
yield message
message.destroy
true
else
false
end
end
def save
requires :name
data = service.create_queue(name)
true
end
def destroy
requires :name
service.delete_queue(name)
true
end
end
end
end
end