kameleoon-client-ruby 3.10.0 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1831531ee6a40f0fbd32f110f9a9c9c1a33f71569c8b8de842bc01c06250d6d5
4
- data.tar.gz: 6e6f8f9d0ee511c2a27fc63ff040e6155b90df66925989d1d08bd473f86c071b
3
+ metadata.gz: d70f414ac8fb37aa97f11f9a01008c602e828efe9305399964910914eff43050
4
+ data.tar.gz: 52ece8845cf02e17198268fd9b5b8e3275c86a11bbf01acc7e68362a80a64e46
5
5
  SHA512:
6
- metadata.gz: 6f575eb2b6e12302ffa5cdb067582d994ab890edcab12f174732d396adc4248fc96a9e27935c008db52f59a93b5e0c713530356acab47711727651d2a4d48e3a
7
- data.tar.gz: '058e6a5284550663cf20223eca099728a9ca0985aacfcfa829e585070228a83b38b4facda77d38a7f3ae17ae8fad37cc7898e47e2519826364a46b3205b33452'
6
+ metadata.gz: d62ef28c65650b491fd47beebb8dbdcee803cf78faacec4c998a6e02681cbf0f0aeb032db78637e94703eeb88de7821eb1fe84b4fd943ee65328cd87942332c9
7
+ data.tar.gz: 7e980fbb43d05dcdefceb257d003f7846e2bb131f0814216dcec56ef3273b35fe65ffac0cabe4cff1cbb0da1cb6095f41ca63c05241d42d972a844094e0d83d5
@@ -1,26 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'json'
4
+ require 'kameleoon/data/custom_data'
4
5
  require 'kameleoon/network/uri_helper'
6
+ require 'kameleoon/utils'
5
7
  require_relative 'data'
6
8
 
7
9
  module Kameleoon
8
10
  # Conversion class uses for tracking conversion
9
11
  class Conversion < DuplicationSafeData
10
- attr_reader :goal_id, :revenue, :negative
12
+ attr_reader :goal_id, :revenue, :negative, :metadata
11
13
 
12
14
  def to_s
13
- "Conversion{goal_id:#{@goal_id},revenue:#{@revenue},negative:#{@negative}}"
15
+ "Conversion{goal_id:#{@goal_id},revenue:#{@revenue},negative:#{@negative}," \
16
+ "metadata:#{Utils::Strval.obj_to_s(@metadata)}}"
14
17
  end
15
18
 
16
19
  # @param [Integer] goal_id Id of the goal associated to the conversion
17
20
  # @param [Float] revenue Optional field - Revenue associated to the conversion.
18
21
  # @param [Boolean] negative Optional field - If the revenue is negative. By default it's positive.
19
- def initialize(goal_id, revenue = 0.0, negative = false)
22
+ # @param [Array] metadata Optional field - Metadata of the conversion. Array of CustomData objects.
23
+ def initialize(goal_id, revenue = 0.0, negative = false, metadata: nil)
20
24
  super(DataType::CONVERSION)
21
25
  @goal_id = goal_id
22
26
  @revenue = revenue || 0.0
23
27
  @negative = negative || false
28
+ @metadata = metadata
24
29
  end
25
30
 
26
31
  def obtain_full_post_text_line
@@ -31,7 +36,22 @@ module Kameleoon
31
36
  negative: @negative,
32
37
  nonce: nonce
33
38
  }
39
+ params[:metadata] = encode_metadata if @metadata&.length&.positive?
34
40
  Kameleoon::Network::UriHelper.encode_query(params)
35
41
  end
42
+
43
+ private
44
+
45
+ def encode_metadata
46
+ metadata = {}
47
+ added_indices = Set[]
48
+ @metadata&.each do |mcd|
49
+ next if !mcd.is_a?(CustomData) || added_indices.include?(mcd.id)
50
+
51
+ metadata[mcd.id] = mcd.values
52
+ added_indices.add(mcd.id)
53
+ end
54
+ JSON.generate(metadata)
55
+ end
36
56
  end
37
57
  end
@@ -38,10 +38,6 @@ module Kameleoon
38
38
  @values = args
39
39
  end
40
40
 
41
- if @values.empty?
42
- Logging::KameleoonLogger.error('Created a custom data %s with no values. It will not be tracked.', @id)
43
- end
44
-
45
41
  return if @id.is_a?(Integer)
46
42
 
47
43
  Logging::KameleoonLogger.warning("CustomData field 'id' must be of 'Integer' type")
@@ -50,8 +46,6 @@ module Kameleoon
50
46
  # rubocop:enable Metrics/MethodLength
51
47
 
52
48
  def obtain_full_post_text_line
53
- return '' if @values.empty?
54
-
55
49
  str_values = JSON.generate(Hash[@values.collect { |k| [k, 1] }])
56
50
  params = {
57
51
  eventType: 'customData',
@@ -186,21 +186,29 @@ module Kameleoon
186
186
  # @param [Float] revenue Optional - Revenue of the conversion.
187
187
  # @param [Bool] is_unique_identifier(DEPRECATED) Parameter that specifies whether the visitorCode is a unique
188
188
  # identifier. This field is optional.
189
+ # @param [Bool] negative Defines if the revenue is positive or negative.
190
+ # This field is optional (`false` by default).
191
+ # @param [Array] metadata Metadata of the conversion. This field is optional.
189
192
  #
190
193
  # @raise [Kameleoon::Exception::VisitorCodeInvalid] If the visitor code is empty or longer than 255 chars
191
194
  #
192
- def track_conversion(visitor_code, goal_id, revenue = 0.0, is_unique_identifier: nil)
195
+ def track_conversion(
196
+ visitor_code, goal_id, revenue = 0.0,
197
+ is_unique_identifier: nil, negative: false, metadata: nil
198
+ )
193
199
  Logging::KameleoonLogger.info(
194
- "CALL: KameleoonClient.track_conversion(visitor_code: '%s', goal_id: %s, revenue: %s, is_unique_identifier: %s)",
195
- visitor_code, goal_id, revenue, is_unique_identifier
200
+ "CALL: KameleoonClient.track_conversion(visitor_code: '%s', goal_id: %s, revenue: %s, " \
201
+ 'is_unique_identifier: %s, negative: %s, metadata: %s)',
202
+ visitor_code, goal_id, revenue, is_unique_identifier, negative, metadata
196
203
  )
197
204
  Utils::VisitorCode.validate(visitor_code)
198
205
  set_unique_identifier(visitor_code, is_unique_identifier) unless is_unique_identifier.nil?
199
- add_data(visitor_code, Conversion.new(goal_id, revenue))
206
+ add_data(visitor_code, Conversion.new(goal_id, revenue, negative, metadata: metadata))
200
207
  @tracking_manager.add_visitor_code(visitor_code)
201
208
  Logging::KameleoonLogger.info(
202
- "RETURN: KameleoonClient.track_conversion(visitor_code: '%s', goal_id: %s, revenue: %s, is_unique_identifier: %s)",
203
- visitor_code, goal_id, revenue, is_unique_identifier
209
+ "RETURN: KameleoonClient.track_conversion(visitor_code: '%s', goal_id: %s, revenue: %s, " \
210
+ 'is_unique_identifier: %s, negative: %s, metadata: %s)',
211
+ visitor_code, goal_id, revenue, is_unique_identifier, negative, metadata
204
212
  )
205
213
  end
206
214
 
@@ -50,6 +50,22 @@ module Kameleoon
50
50
  end
51
51
 
52
52
  module Strval
53
+ def self.obj_to_s(obj)
54
+ case obj
55
+ when nil
56
+ 'nil'
57
+ when String
58
+ "'#{obj}'"
59
+ when Array
60
+ "[#{obj.map { |v| obj_to_s(v) }.join(',')}]"
61
+ when Hash
62
+ sb = []
63
+ obj.each { |k, v| sb.push("#{obj_to_s(k)}:#{obj_to_s(v)}") }
64
+ "{#{sb.join(',')}}"
65
+ else
66
+ obj.to_s
67
+ end
68
+ end
53
69
 
54
70
  def self.secret(secret)
55
71
  hid_ch = '*'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kameleoon
4
- SDK_VERSION = '3.10.0'
4
+ SDK_VERSION = '3.11.0'
5
5
  SDK_NAME = 'RUBY'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kameleoon-client-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.10.0
4
+ version: 3.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kameleoon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-18 00:00:00.000000000 Z
11
+ date: 2025-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request