File: payload.rb

package info (click to toggle)
ruby-snowplow-tracker 0.8.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 176 kB
  • sloc: ruby: 515; makefile: 4
file content (62 lines) | stat: -rw-r--r-- 2,134 bytes parent folder | download
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
# Copyright (c) 2013-2021 Snowplow Analytics Ltd. All rights reserved.
#
# This program is licensed to you under the Apache License Version 2.0,
# and you may not use this file except in compliance with the Apache License Version 2.0.
# You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0.
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the Apache License Version 2.0 is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the Apache License Version 2.0 for the specific language governing permissions and limitations there under.

# Author:: Snowplow Analytics Ltd
# Copyright:: Copyright (c) 2013-2021 Snowplow Analytics Ltd
# License:: Apache License Version 2.0


require 'base64'
require 'json'
require 'net/http'

module SnowplowTracker
  # @private
  # Every`track_x_event` method creates a new Payload object. The Tracker then
  # uses the Payload instance methods to add properties to the Payload `@data`
  # hash. These properties form the raw event, after the completed hash is
  # given to the Emitter.
  class Payload
    attr_reader :data

    def initialize
      @data = {}
    end

    # Add a single name-value pair to @data.
    def add(name, value)
      @data[name] = value if (value != '') && !value.nil?
    end

    # Add each name-value pair in a hash to @data.
    def add_hash(hash)
      hash.each { |key, value| add(key, value) }
    end

    # Stringify a JSON and add it to @data.
    #
    # In practice, the JSON provided will be a SelfDescribingJson. This method
    # is used to add context to events, or for `track_self_describing_event`.
    # @see Tracker#track_unstruct_event
    # @see Tracker#finalise_payload
    def add_json(json, encode_base64, type_when_encoded, type_when_not_encoded)
      return if json.nil?

      stringified = JSON.generate(json)

      if encode_base64
        add(type_when_encoded, Base64.strict_encode64(stringified))
      else
        add(type_when_not_encoded, stringified)
      end
    end
  end
end