lib/cloudist/payload.rb in cloudist-0.4.4 vs lib/cloudist/payload.rb in cloudist-0.5.0
- old
+ new
@@ -1,91 +1,91 @@
module Cloudist
class Payload
include Utils
include Encoding
-
+
attr_reader :body, :headers, :amqp_headers, :timestamp
-
+
def initialize(body, headers = {})
@published = false
@timestamp = Time.now.to_f
-
+
body = decode(body) if body.is_a?(String)
@body = Hashie::Mash.new(decode(body))
@headers = Hashie::Mash.new(headers)
@amqp_headers = {}
# puts "Initialised Payload: #{id}"
-
+
parse_headers!
end
-
+
def find_or_create_id
- if headers["message_id"].present?
+ if headers["message_id"]
headers.message_id
else
UUID.generate
end
end
-
+
def id
find_or_create_id
end
-
+
def to_a
[encode(body), {:headers => encoded_headers}]
end
-
+
def parse_headers!
headers[:published_on] ||= body.delete("timestamp") || timestamp
headers[:message_type] ||= body.delete("message_type") || 'reply'
-
+
headers[:ttl] ||= Cloudist::DEFAULT_TTL
headers[:message_id] = id
-
+
headers[:published_on] = headers[:published_on].to_f
-
+
headers[:ttl] = headers[:ttl].to_i rescue -1
headers[:ttl] = -1 if headers[:ttl] == 0
-
+
# If this payload was received with a timestamp,
# we don't want to override it on #timestamp
if timestamp > headers[:published_on]
@timestamp = headers[:published_on]
end
-
+
headers
end
-
+
def encoded_headers
h = headers.dup
h.each { |k,v| h[k] = v.to_s }
return h
end
-
+
def set_reply_to(queue_name)
headers[:reply_to] = reply_prefix(queue_name)
end
-
+
def reply_to
headers.reply_to
end
-
+
def message_type
headers.message_type
end
-
+
def [](key)
self.body[key.to_s]
end
-
+
def method_missing(meth, *args, &blk)
if body.has_key?(meth.to_s)
return body[meth]
elsif key = meth.to_s.match(/(.+)(?:\?$)/).to_a.last
body.has_key?(key.to_s)
else
super
end
end
-
+
end
-end
\ No newline at end of file
+end