lib/fake_sqs/message.rb in fake_sqs-0.3.1 vs lib/fake_sqs/message.rb in fake_sqs-0.4.0

- old
+ new

@@ -1,35 +1,55 @@ require 'securerandom' module FakeSQS class Message - attr_reader :body, :id, :md5 + attr_reader :body, :id, :md5, :delay_seconds, :approximate_receive_count, + :sender_id, :approximate_first_receive_timestamp, :sent_timestamp attr_accessor :visibility_timeout def initialize(options = {}) @body = options.fetch("MessageBody") @id = options.fetch("Id") { SecureRandom.uuid } @md5 = options.fetch("MD5") { Digest::MD5.hexdigest(@body) } + @sender_id = options.fetch("SenderId") { SecureRandom.uuid.delete('-').upcase[0...21] } + @approximate_receive_count = 0 + @sent_timestamp = Time.now.to_i * 1000 + @delay_seconds = options.fetch("DelaySeconds", 0).to_i end def expire! self.visibility_timeout = nil end + def receive! + @approximate_first_receive_timestamp ||= Time.now.to_i * 1000 + @approximate_receive_count += 1 + end + def expired?( limit = Time.now ) self.visibility_timeout.nil? || self.visibility_timeout < limit end def expire_at(seconds) self.visibility_timeout = Time.now + seconds end + def published? + if self.delay_seconds && self.delay_seconds > 0 + elapsed_seconds = Time.now.to_i - (self.sent_timestamp.to_i / 1000) + elapsed_seconds >= self.delay_seconds + else + true + end + end + def attributes { - "MessageBody" => body, - "Id" => id, - "MD5" => md5, + "SenderId" => sender_id, + "ApproximateFirstReceiveTimestamp" => approximate_first_receive_timestamp, + "ApproximateReceiveCount"=> approximate_receive_count, + "SentTimestamp"=> sent_timestamp } end end end