optimizely-sdk 5.0.0 → 5.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +202 -202
  3. data/lib/optimizely/audience.rb +127 -127
  4. data/lib/optimizely/bucketer.rb +156 -156
  5. data/lib/optimizely/condition_tree_evaluator.rb +123 -123
  6. data/lib/optimizely/config/datafile_project_config.rb +558 -558
  7. data/lib/optimizely/config/proxy_config.rb +34 -34
  8. data/lib/optimizely/config_manager/async_scheduler.rb +95 -95
  9. data/lib/optimizely/config_manager/http_project_config_manager.rb +340 -340
  10. data/lib/optimizely/config_manager/project_config_manager.rb +25 -25
  11. data/lib/optimizely/config_manager/static_project_config_manager.rb +55 -55
  12. data/lib/optimizely/decide/optimizely_decide_option.rb +28 -28
  13. data/lib/optimizely/decide/optimizely_decision.rb +60 -60
  14. data/lib/optimizely/decide/optimizely_decision_message.rb +26 -26
  15. data/lib/optimizely/decision_service.rb +563 -563
  16. data/lib/optimizely/error_handler.rb +39 -39
  17. data/lib/optimizely/event/batch_event_processor.rb +235 -235
  18. data/lib/optimizely/event/entity/conversion_event.rb +44 -44
  19. data/lib/optimizely/event/entity/decision.rb +38 -38
  20. data/lib/optimizely/event/entity/event_batch.rb +86 -86
  21. data/lib/optimizely/event/entity/event_context.rb +50 -50
  22. data/lib/optimizely/event/entity/impression_event.rb +48 -48
  23. data/lib/optimizely/event/entity/snapshot.rb +33 -33
  24. data/lib/optimizely/event/entity/snapshot_event.rb +48 -48
  25. data/lib/optimizely/event/entity/user_event.rb +22 -22
  26. data/lib/optimizely/event/entity/visitor.rb +36 -36
  27. data/lib/optimizely/event/entity/visitor_attribute.rb +38 -38
  28. data/lib/optimizely/event/event_factory.rb +156 -156
  29. data/lib/optimizely/event/event_processor.rb +25 -25
  30. data/lib/optimizely/event/forwarding_event_processor.rb +44 -44
  31. data/lib/optimizely/event/user_event_factory.rb +88 -88
  32. data/lib/optimizely/event_builder.rb +221 -221
  33. data/lib/optimizely/event_dispatcher.rb +69 -69
  34. data/lib/optimizely/exceptions.rb +193 -193
  35. data/lib/optimizely/helpers/constants.rb +459 -459
  36. data/lib/optimizely/helpers/date_time_utils.rb +30 -30
  37. data/lib/optimizely/helpers/event_tag_utils.rb +132 -132
  38. data/lib/optimizely/helpers/group.rb +31 -31
  39. data/lib/optimizely/helpers/http_utils.rb +68 -68
  40. data/lib/optimizely/helpers/sdk_settings.rb +61 -61
  41. data/lib/optimizely/helpers/validator.rb +236 -236
  42. data/lib/optimizely/helpers/variable_type.rb +67 -67
  43. data/lib/optimizely/logger.rb +46 -46
  44. data/lib/optimizely/notification_center.rb +174 -174
  45. data/lib/optimizely/notification_center_registry.rb +71 -71
  46. data/lib/optimizely/odp/lru_cache.rb +114 -114
  47. data/lib/optimizely/odp/odp_config.rb +102 -102
  48. data/lib/optimizely/odp/odp_event.rb +75 -75
  49. data/lib/optimizely/odp/odp_event_api_manager.rb +70 -70
  50. data/lib/optimizely/odp/odp_event_manager.rb +286 -286
  51. data/lib/optimizely/odp/odp_manager.rb +159 -159
  52. data/lib/optimizely/odp/odp_segment_api_manager.rb +122 -122
  53. data/lib/optimizely/odp/odp_segment_manager.rb +97 -97
  54. data/lib/optimizely/optimizely_config.rb +273 -273
  55. data/lib/optimizely/optimizely_factory.rb +184 -184
  56. data/lib/optimizely/optimizely_user_context.rb +238 -238
  57. data/lib/optimizely/params.rb +31 -31
  58. data/lib/optimizely/project_config.rb +99 -99
  59. data/lib/optimizely/semantic_version.rb +166 -166
  60. data/lib/optimizely/user_condition_evaluator.rb +391 -391
  61. data/lib/optimizely/user_profile_service.rb +35 -35
  62. data/lib/optimizely/version.rb +21 -21
  63. data/lib/optimizely.rb +1262 -1262
  64. metadata +7 -5
@@ -1,123 +1,123 @@
1
- # frozen_string_literal: true
2
-
3
- #
4
- # Copyright 2019, 2022, Optimizely and contributors
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
- module Optimizely
19
- module ConditionTreeEvaluator
20
- # Operator types
21
- AND_CONDITION = 'and'
22
- OR_CONDITION = 'or'
23
- NOT_CONDITION = 'not'
24
-
25
- EVALUATORS_BY_OPERATOR_TYPE = {
26
- AND_CONDITION => :and_evaluator,
27
- OR_CONDITION => :or_evaluator,
28
- NOT_CONDITION => :not_evaluator
29
- }.freeze
30
-
31
- OPERATORS = [AND_CONDITION, OR_CONDITION, NOT_CONDITION].freeze
32
-
33
- module_function
34
-
35
- def evaluate(conditions, leaf_evaluator)
36
- # Top level method to evaluate audience conditions.
37
- #
38
- # conditions - Nested array of and/or conditions.
39
- # Example: ['and', operand_1, ['or', operand_2, operand_3]]
40
- #
41
- # leaf_evaluator - Function which will be called to evaluate leaf condition values.
42
- #
43
- # Returns boolean if the given user attributes match/don't match the given conditions,
44
- # nil if the given conditions are invalid or can't be evaluated.
45
-
46
- if conditions.is_a? Array
47
- first_operator = conditions[0]
48
- rest_of_conditions = conditions[1..]
49
-
50
- # Operator to apply is not explicit - assume 'or'
51
- unless EVALUATORS_BY_OPERATOR_TYPE.include?(conditions[0])
52
- first_operator = OR_CONDITION
53
- rest_of_conditions = conditions
54
- end
55
-
56
- return send(EVALUATORS_BY_OPERATOR_TYPE[first_operator], rest_of_conditions, leaf_evaluator)
57
- end
58
-
59
- leaf_evaluator.call(conditions)
60
- end
61
-
62
- def and_evaluator(conditions, leaf_evaluator)
63
- # Evaluates an array of conditions as if the evaluator had been applied
64
- # to each entry and the results AND-ed together.
65
- #
66
- # conditions - Array of conditions ex: [operand_1, operand_2]
67
- #
68
- # leaf_evaluator - Function which will be called to evaluate leaf condition values.
69
- #
70
- # Returns boolean if the user attributes match/don't match the given conditions,
71
- # nil if the user attributes and conditions can't be evaluated.
72
-
73
- found_nil = false
74
- conditions.each do |condition|
75
- result = evaluate(condition, leaf_evaluator)
76
- return result if result == false
77
-
78
- found_nil = true if result.nil?
79
- end
80
-
81
- found_nil ? nil : true
82
- end
83
-
84
- def not_evaluator(single_condition, leaf_evaluator)
85
- # Evaluates an array of conditions as if the evaluator had been applied
86
- # to a single entry and NOT was applied to the result.
87
- #
88
- # single_condition - Array of a single condition ex: [operand_1]
89
- #
90
- # leaf_evaluator - Function which will be called to evaluate leaf condition values.
91
- #
92
- # Returns boolean if the user attributes match/don't match the given conditions,
93
- # nil if the user attributes and conditions can't be evaluated.
94
-
95
- return nil if single_condition.empty?
96
-
97
- result = evaluate(single_condition[0], leaf_evaluator)
98
- result.nil? ? nil : !result
99
- end
100
-
101
- def or_evaluator(conditions, leaf_evaluator)
102
- # Evaluates an array of conditions as if the evaluator had been applied
103
- # to each entry and the results OR-ed together.
104
- #
105
- # conditions - Array of conditions ex: [operand_1, operand_2]
106
- #
107
- # leaf_evaluator - Function which will be called to evaluate leaf condition values.
108
- #
109
- # Returns boolean if the user attributes match/don't match the given conditions,
110
- # nil if the user attributes and conditions can't be evaluated.
111
-
112
- found_nil = false
113
- conditions.each do |condition|
114
- result = evaluate(condition, leaf_evaluator)
115
- return result if result == true
116
-
117
- found_nil = true if result.nil?
118
- end
119
-
120
- found_nil ? nil : false
121
- end
122
- end
123
- end
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright 2019, 2022, Optimizely and contributors
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ module Optimizely
19
+ module ConditionTreeEvaluator
20
+ # Operator types
21
+ AND_CONDITION = 'and'
22
+ OR_CONDITION = 'or'
23
+ NOT_CONDITION = 'not'
24
+
25
+ EVALUATORS_BY_OPERATOR_TYPE = {
26
+ AND_CONDITION => :and_evaluator,
27
+ OR_CONDITION => :or_evaluator,
28
+ NOT_CONDITION => :not_evaluator
29
+ }.freeze
30
+
31
+ OPERATORS = [AND_CONDITION, OR_CONDITION, NOT_CONDITION].freeze
32
+
33
+ module_function
34
+
35
+ def evaluate(conditions, leaf_evaluator)
36
+ # Top level method to evaluate audience conditions.
37
+ #
38
+ # conditions - Nested array of and/or conditions.
39
+ # Example: ['and', operand_1, ['or', operand_2, operand_3]]
40
+ #
41
+ # leaf_evaluator - Function which will be called to evaluate leaf condition values.
42
+ #
43
+ # Returns boolean if the given user attributes match/don't match the given conditions,
44
+ # nil if the given conditions are invalid or can't be evaluated.
45
+
46
+ if conditions.is_a? Array
47
+ first_operator = conditions[0]
48
+ rest_of_conditions = conditions[1..]
49
+
50
+ # Operator to apply is not explicit - assume 'or'
51
+ unless EVALUATORS_BY_OPERATOR_TYPE.include?(conditions[0])
52
+ first_operator = OR_CONDITION
53
+ rest_of_conditions = conditions
54
+ end
55
+
56
+ return send(EVALUATORS_BY_OPERATOR_TYPE[first_operator], rest_of_conditions, leaf_evaluator)
57
+ end
58
+
59
+ leaf_evaluator.call(conditions)
60
+ end
61
+
62
+ def and_evaluator(conditions, leaf_evaluator)
63
+ # Evaluates an array of conditions as if the evaluator had been applied
64
+ # to each entry and the results AND-ed together.
65
+ #
66
+ # conditions - Array of conditions ex: [operand_1, operand_2]
67
+ #
68
+ # leaf_evaluator - Function which will be called to evaluate leaf condition values.
69
+ #
70
+ # Returns boolean if the user attributes match/don't match the given conditions,
71
+ # nil if the user attributes and conditions can't be evaluated.
72
+
73
+ found_nil = false
74
+ conditions.each do |condition|
75
+ result = evaluate(condition, leaf_evaluator)
76
+ return result if result == false
77
+
78
+ found_nil = true if result.nil?
79
+ end
80
+
81
+ found_nil ? nil : true
82
+ end
83
+
84
+ def not_evaluator(single_condition, leaf_evaluator)
85
+ # Evaluates an array of conditions as if the evaluator had been applied
86
+ # to a single entry and NOT was applied to the result.
87
+ #
88
+ # single_condition - Array of a single condition ex: [operand_1]
89
+ #
90
+ # leaf_evaluator - Function which will be called to evaluate leaf condition values.
91
+ #
92
+ # Returns boolean if the user attributes match/don't match the given conditions,
93
+ # nil if the user attributes and conditions can't be evaluated.
94
+
95
+ return nil if single_condition.empty?
96
+
97
+ result = evaluate(single_condition[0], leaf_evaluator)
98
+ result.nil? ? nil : !result
99
+ end
100
+
101
+ def or_evaluator(conditions, leaf_evaluator)
102
+ # Evaluates an array of conditions as if the evaluator had been applied
103
+ # to each entry and the results OR-ed together.
104
+ #
105
+ # conditions - Array of conditions ex: [operand_1, operand_2]
106
+ #
107
+ # leaf_evaluator - Function which will be called to evaluate leaf condition values.
108
+ #
109
+ # Returns boolean if the user attributes match/don't match the given conditions,
110
+ # nil if the user attributes and conditions can't be evaluated.
111
+
112
+ found_nil = false
113
+ conditions.each do |condition|
114
+ result = evaluate(condition, leaf_evaluator)
115
+ return result if result == true
116
+
117
+ found_nil = true if result.nil?
118
+ end
119
+
120
+ found_nil ? nil : false
121
+ end
122
+ end
123
+ end