1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
require 'time'
require 'base64'
module AWS
class SQS
# Represents message published from an {SNS::Topic} to an {SQS::Queue}.
class ReceivedSNSMessage
include Core::Model
# @param [String] body The SQS message body
# from a message published by SNS.
# @param [Hash] options
def initialize body, options = {}
@body = body
super
end
# @return [String] Returns the JSON hash (as a string) as was
# published by SNS. See {#body} to get the decoded message
# or {#to_h} to get the decoded JSON hash as a ruby hash.
def raw_message
@body
end
# @return[String] Returns the decoded message as was published.
def body
to_h[:body]
end
# @return [String] Returns the ARN for the topic that published this
# message.
def topic_arn
to_h[:topic_arn]
end
# @return [SNS::Topic] Returns the topic that published this message.
def topic
SNS::Topic.new(topic_arn, :config => config)
end
# @return [String] Returns the message type.
def message_type
to_h[:message_type]
end
# @return [String] Returns the calculated signature for the message.
def signature
to_h[:signature]
end
# @return [String] Returns the signature version.
def signature_version
to_h[:signature_version]
end
# @return [Time] Returns the time the message was published at by SNS.
# by SNS.
def published_at
to_h[:published_at]
end
# @return [String] Returns the unique id of the SNS message.
def message_id
to_h[:message_id]
end
# @return [String] Returns the url for the signing cert.
def signing_cert_url
to_h[:signing_cert_url]
end
# @return [String] Returns the url you can request to unsubscribe message
# from this queue.
def unsubscribe_url
to_h[:unsubscribe_url]
end
# @return [Hash] Returns the decoded message as a hash.
def to_h
data = JSON.parse(@body)
{
:body => data['Message'],
:topic_arn => data['TopicArn'],
:message_type => data['Type'],
:signature => data['Signature'],
:signature_version => data['SignatureVersion'],
:published_at => Time.parse(data['Timestamp']),
:message_id => data['MessageId'],
:signing_cert_url => data['SigningCertURL'],
:unsubscribe_url => data['UnsubscribeURL'],
}
end
# @return [Hash] Returns the decoded message body as a hash.
def body_message_as_h
@body_message_as_h ||= JSON.parse(to_h[:body])
end
end
end
end
|