kameleoon-client-ruby 3.18.0 → 3.20.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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/lib/kameleoon/configuration/data_file.rb +9 -4
  3. data/lib/kameleoon/configuration/variable.rb +12 -0
  4. data/lib/kameleoon/configuration/variation.rb +1 -1
  5. data/lib/kameleoon/data/browser.rb +1 -1
  6. data/lib/kameleoon/data/conversion.rb +12 -3
  7. data/lib/kameleoon/data/custom_data.rb +1 -1
  8. data/lib/kameleoon/data/data.rb +1 -1
  9. data/lib/kameleoon/data/device.rb +1 -1
  10. data/lib/kameleoon/data/geolocation.rb +1 -1
  11. data/lib/kameleoon/data/manager/assigned_variation.rb +2 -2
  12. data/lib/kameleoon/data/manager/page_view_visit.rb +2 -2
  13. data/lib/kameleoon/data/manager/visitor.rb +2 -2
  14. data/lib/kameleoon/data/manager/visitor_manager.rb +11 -1
  15. data/lib/kameleoon/data/mapping_identifier.rb +1 -1
  16. data/lib/kameleoon/data/operating_system.rb +1 -2
  17. data/lib/kameleoon/data/page_view.rb +1 -1
  18. data/lib/kameleoon/data/personalization.rb +4 -3
  19. data/lib/kameleoon/data/targeted_segment.rb +1 -1
  20. data/lib/kameleoon/data/visitor_visits.rb +1 -1
  21. data/lib/kameleoon/kameleoon_client.rb +18 -71
  22. data/lib/kameleoon/managers/data/data_manager.rb +16 -2
  23. data/lib/kameleoon/managers/remote_data/remote_visitor_data.rb +20 -5
  24. data/lib/kameleoon/managers/tracking/tracking_builder.rb +2 -2
  25. data/lib/kameleoon/network/access_token_source.rb +11 -3
  26. data/lib/kameleoon/network/activity_event.rb +1 -1
  27. data/lib/kameleoon/network/net_provider.rb +4 -1
  28. data/lib/kameleoon/network/network_manager.rb +2 -3
  29. data/lib/kameleoon/network/request.rb +6 -3
  30. data/lib/kameleoon/network/url_provider.rb +21 -3
  31. data/lib/kameleoon/targeting/conditions/conversion_condition.rb +28 -13
  32. data/lib/kameleoon/targeting/conditions/exclusive_experiment_condition.rb +38 -19
  33. data/lib/kameleoon/targeting/conditions/target_experiment_condition.rb +12 -10
  34. data/lib/kameleoon/targeting/conditions/target_feature_flag_condition.rb +26 -22
  35. data/lib/kameleoon/targeting/conditions/target_personalization_condition.rb +12 -10
  36. data/lib/kameleoon/targeting/conditions/time_elapsed_since_visit_condition.rb +1 -2
  37. data/lib/kameleoon/targeting/conditions/unknown_condition.rb +1 -0
  38. data/lib/kameleoon/targeting/conditions/visit_number_today_condition.rb +2 -2
  39. data/lib/kameleoon/targeting/conditions/visitor_scope_condition.rb +56 -0
  40. data/lib/kameleoon/targeting/targeting_manager.rb +12 -5
  41. data/lib/kameleoon/types/data_file.rb +14 -3
  42. data/lib/kameleoon/types/feature_flag.rb +22 -0
  43. data/lib/kameleoon/types/rule.rb +21 -0
  44. data/lib/kameleoon/types/variable.rb +8 -0
  45. data/lib/kameleoon/types/variation.rb +12 -0
  46. data/lib/kameleoon/version.rb +1 -1
  47. metadata +3 -2
@@ -1,18 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'kameleoon/types/feature_flag'
4
+
3
5
  module Kameleoon
4
6
  module Types
5
7
  # DataFile
6
8
  class DataFile
7
- attr_reader :feature_flags
9
+ attr_reader :feature_flags, :date_modified
8
10
 
9
11
  # @api private
10
- def initialize(feature_flags)
12
+ def initialize(feature_flags, date_modified)
11
13
  @feature_flags = feature_flags
14
+ @date_modified = date_modified
15
+ end
16
+
17
+ # @api private
18
+ def self._build_from_internal(source_data_file)
19
+ feature_flags = (source_data_file.feature_flags || {}).transform_values do |feature_flag|
20
+ FeatureFlag._build_from_internal(feature_flag)
21
+ end
22
+ DataFile.new(feature_flags, source_data_file.date_modified)
12
23
  end
13
24
 
14
25
  def to_s
15
- "DataFile{feature_flags:#{@feature_flags}}"
26
+ "DataFile{feature_flags:#{@feature_flags},date_modified:#{@date_modified}}"
16
27
  end
17
28
  end
18
29
  end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'kameleoon/types/rule'
4
+ require 'kameleoon/types/variation'
5
+
3
6
  module Kameleoon
4
7
  module Types
5
8
  # FeatureFlag
@@ -18,6 +21,25 @@ module Kameleoon
18
21
  @variations[@default_variation_key]
19
22
  end
20
23
 
24
+ # @api private
25
+ def self._build_from_internal(source_feature_flag)
26
+ variations = (source_feature_flag.variations || []).each_with_object({}) do |variation, result|
27
+ ext_variation = Variation._build_from_internal(variation)
28
+ result[ext_variation.key] = ext_variation
29
+ end
30
+
31
+ rules = (source_feature_flag.rules || []).map do |rule|
32
+ Rule._build_from_internal(rule, variations)
33
+ end
34
+
35
+ FeatureFlag.new(
36
+ variations,
37
+ source_feature_flag.environment_enabled,
38
+ rules,
39
+ source_feature_flag.default_variation_key
40
+ )
41
+ end
42
+
21
43
  def to_s
22
44
  "FeatureFlag{variations:#{@variations},environment_enabled:#{@environment_enabled},rules:#{@rules},default_variation_key:#{@default_variation_key}}"
23
45
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'kameleoon/types/variation'
4
+
3
5
  module Kameleoon
4
6
  module Types
5
7
  # Rule
@@ -11,6 +13,25 @@ module Kameleoon
11
13
  @variations = variations
12
14
  end
13
15
 
16
+ # @api private
17
+ def self._build_from_internal(internal_rule, variations)
18
+ rule_variations = {}
19
+ vars_by_exposition = internal_rule.experiment&.variations_by_exposition || []
20
+ vars_by_exposition.each do |var_by_exp|
21
+ base_variation = variations[var_by_exp.variation_key]
22
+ next if base_variation.nil?
23
+
24
+ rule_variations[base_variation.key] = Variation.new(
25
+ base_variation.key,
26
+ var_by_exp.variation_id,
27
+ internal_rule.experiment&.id,
28
+ base_variation.variables,
29
+ base_variation.name
30
+ )
31
+ end
32
+ Rule.new(rule_variations)
33
+ end
34
+
14
35
  def to_s
15
36
  "Rule{variations:#{@variations}}"
16
37
  end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'json'
4
+ require 'kameleoon/logging/kameleoon_logger'
5
+
3
6
  module Kameleoon
4
7
  module Types
5
8
  # Variable
@@ -16,6 +19,11 @@ module Kameleoon
16
19
  @type = type
17
20
  @value = value
18
21
  end
22
+
23
+ # @api private
24
+ def self._build_from_internal(source_variable)
25
+ Variable.new(source_variable.key, source_variable.type, source_variable.get_value)
26
+ end
19
27
  end
20
28
  end
21
29
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'kameleoon/configuration/variation'
4
+ require 'kameleoon/types/variable'
4
5
 
5
6
  module Kameleoon
6
7
  module Types
@@ -21,6 +22,17 @@ module Kameleoon
21
22
  @name = name
22
23
  end
23
24
 
25
+ # @api private
26
+ def self._build_from_internal(source_variation, variation_id = nil, experiment_id = nil)
27
+ variables = (source_variation&.variables || []).each_with_object({}) do |variable, result|
28
+ ext_variable = Variable._build_from_internal(variable)
29
+ result[ext_variable.key] = ext_variable
30
+ end
31
+ key = source_variation&.key || ''
32
+ name = source_variation&.name || ''
33
+ Variation.new(key, variation_id, experiment_id, variables, name)
34
+ end
35
+
24
36
  def active?
25
37
  @key != Configuration::VariationType::VARIATION_OFF
26
38
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kameleoon
4
- SDK_VERSION = '3.18.0'
4
+ SDK_VERSION = '3.20.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.18.0
4
+ version: 3.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kameleoon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-02-13 00:00:00.000000000 Z
11
+ date: 2026-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request
@@ -178,6 +178,7 @@ files:
178
178
  - lib/kameleoon/targeting/conditions/visit_number_total_condition.rb
179
179
  - lib/kameleoon/targeting/conditions/visitor_code_condition.rb
180
180
  - lib/kameleoon/targeting/conditions/visitor_new_return_condition.rb
181
+ - lib/kameleoon/targeting/conditions/visitor_scope_condition.rb
181
182
  - lib/kameleoon/targeting/models.rb
182
183
  - lib/kameleoon/targeting/targeting_manager.rb
183
184
  - lib/kameleoon/targeting/tree_builder.rb