File: received_sns_message.rb

package info (click to toggle)
ruby-aws-sdk 1.67.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,840 kB
  • sloc: ruby: 28,436; makefile: 7
file content (116 lines) | stat: -rw-r--r-- 3,354 bytes parent folder | download | duplicates (4)
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