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/message.rb

89 lines
3.3 KiB
Ruby

require 'fog/core/model'
module Fog
module Rackspace
class Queues
class Message < Fog::Model
# @!attribute [r] age
# @return [Integer] The number of seconds relative to the server's clock.
attribute :age
# @!attribute [rw] ttl
# @return [Integer] specifies how long the server waits before marking the message as expired and removing it from the queue.
# @note The value of ttl must be between 60 and 1209600 seconds (14 days). Note that the server might not actually delete the message until its
# age has reached up to (ttl + 60) seconds, to allow for flexibility in storage implementations.
attribute :ttl
# @!attribute [rw] body
# @return [String, Hash, Array] specifies an arbitrary document that constitutes the body of the message being sent. The size of this body is limited to 256 KB, excluding whitespace. The document must be valid JSON.
attribute :body
# @!attribute [r] href
# @return [String] location of the message
attribute :href
# @!attribute [r] claim_id
# @return [String] the id of the claim
attribute :claim_id
# @!attribute [r] identity
# @return [String] The messages identity
def identity
return nil unless href
match = href.match(/(\/(\w+))*\??/)
match ? match[-1] : nil
end
alias :id :identity
# Creates messages
# Requires queue, client_id, body, and ttl attributes to be populated
# @note messages cannot be updated
#
# @return [Boolean] returns true if message has been succesfully saved
#
# @raise [Fog::Rackspace::Queues::NotFound] - HTTP 404
# @raise [Fog::Rackspace::Queues::BadRequest] - HTTP 400
# @raise [Fog::Rackspace::Queues::InternalServerError] - HTTP 500
# @raise [Fog::Rackspace::Queues::ServiceError]
# @see http://docs.rackspace.com/queues/api/v1.0/cq-devguide/content/POST_postMessage__version__queues__queue_name__messages_message-operations-dle001.html
def save
requires :queue, :client_id, :body, :ttl
raise "Message has already been created and may not be updated." unless identity.nil?
data = service.create_message(client_id, queue.name, body, ttl).body
self.href = data['resources'][0]
true
end
# Destroys Message
#
# @return [Boolean] returns true if message is deleted
#
# @raise [Fog::Rackspace::Queues::NotFound] - HTTP 404
# @raise [Fog::Rackspace::Queues::BadRequest] - HTTP 400
# @raise [Fog::Rackspace::Queues::InternalServerError] - HTTP 500
# @raise [Fog::Rackspace::Queues::ServiceError]
# @see http://docs.rackspace.com/queues/api/v1.0/cq-devguide/content/DELETE_deleteMessage__version__queues__queue_name__messages__messageId__message-operations-dle001.html
def destroy
requires :identity, :queue
options = {}
options[:claim_id] = claim_id unless claim_id.nil?
service.delete_message(queue.name, identity, options)
true
end
private
def queue
collection.queue
end
def client_id
collection.client_id
end
end
end
end
end