mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
93 lines
2.3 KiB
Ruby
93 lines
2.3 KiB
Ruby
|
require 'fog/core/model'
|
||
|
|
||
|
module Fog
|
||
|
module Rackspace
|
||
|
class Queues
|
||
|
class Claim < Fog::Model
|
||
|
|
||
|
identity :identity
|
||
|
|
||
|
attribute :grace
|
||
|
attribute :ttl
|
||
|
attribute :limit
|
||
|
attribute :messages
|
||
|
|
||
|
def save
|
||
|
if identity.nil?
|
||
|
create
|
||
|
else
|
||
|
update
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def destroy
|
||
|
requires :identity, :queue
|
||
|
service.delete_claim(queue.name, identity)
|
||
|
|
||
|
#Since Claims aren't a server side collection, we should remove
|
||
|
# the claim from the collection.
|
||
|
collection.delete(self)
|
||
|
|
||
|
true
|
||
|
end
|
||
|
|
||
|
def messages=(messages)
|
||
|
#HACK - Models require a collection, but I don't really want to expose
|
||
|
# the messages collection to users here.
|
||
|
message_collection = Fog::Rackspace::Queues::Messages.new({
|
||
|
:service => service,
|
||
|
:queue => queue,
|
||
|
:client_id => service.client_id,
|
||
|
:echo => true
|
||
|
})
|
||
|
attributes[:messages] = messages.collect do |message|
|
||
|
if message.instance_of? Fog::Rackspace::Queues::Message
|
||
|
message
|
||
|
else
|
||
|
Fog::Rackspace::Queues::Message.new(
|
||
|
message.merge({
|
||
|
:service => service,
|
||
|
:collection => message_collection
|
||
|
}.merge(message))
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def queue
|
||
|
collection.queue
|
||
|
end
|
||
|
|
||
|
def create
|
||
|
requires :queue, :ttl, :grace, :collection
|
||
|
|
||
|
options = {}
|
||
|
options[:limit] = limit unless limit.nil?
|
||
|
|
||
|
response = service.create_claim(queue.identity, ttl, grace, options)
|
||
|
|
||
|
if [200, 201].include? response.status
|
||
|
self.identity = response.headers['Location'].split('/').last
|
||
|
self.messages = response.body
|
||
|
|
||
|
#Since Claims aren't a server side collection, we need to
|
||
|
# add the claim to the collection
|
||
|
collection << self
|
||
|
true
|
||
|
else
|
||
|
false
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def update
|
||
|
requires :identity, :queue, :ttl
|
||
|
service.update_claim(queue.identity, identity, ttl)
|
||
|
true
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|