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
|
# File 'lib/optimizely/audience.rb', line 27
def user_in_experiment?(config, experiment, attributes, logger)
audience_conditions = experiment['audienceConditions'] || experiment['audienceIds']
logger.log(
Logger::DEBUG,
format(
Helpers::Constants::AUDIENCE_EVALUATION_LOGS['EVALUATING_AUDIENCES_COMBINED'],
experiment['key'],
audience_conditions
)
)
if audience_conditions.empty?
logger.log(
Logger::INFO,
format(
Helpers::Constants::AUDIENCE_EVALUATION_LOGS['AUDIENCE_EVALUATION_RESULT_COMBINED'],
experiment['key'],
'TRUE'
)
)
return true
end
attributes ||= {}
custom_attr_condition_evaluator = CustomAttributeConditionEvaluator.new(attributes, logger)
evaluate_custom_attr = lambda do |condition|
return custom_attr_condition_evaluator.evaluate(condition)
end
evaluate_audience = lambda do |audience_id|
audience = config.get_audience_from_id(audience_id)
return nil unless audience
audience_conditions = audience['conditions']
logger.log(
Logger::DEBUG,
format(
Helpers::Constants::AUDIENCE_EVALUATION_LOGS['EVALUATING_AUDIENCE'],
audience_id,
audience_conditions
)
)
audience_conditions = JSON.parse(audience_conditions) if audience_conditions.is_a?(String)
result = ConditionTreeEvaluator.evaluate(audience_conditions, evaluate_custom_attr)
result_str = result.nil? ? 'UNKNOWN' : result.to_s.upcase
logger.log(
Logger::INFO,
format(Helpers::Constants::AUDIENCE_EVALUATION_LOGS['AUDIENCE_EVALUATION_RESULT'], audience_id, result_str)
)
result
end
eval_result = ConditionTreeEvaluator.evaluate(audience_conditions, evaluate_audience)
eval_result ||= false
logger.log(
Logger::INFO,
format(
Helpers::Constants::AUDIENCE_EVALUATION_LOGS['AUDIENCE_EVALUATION_RESULT_COMBINED'],
experiment['key'],
eval_result.to_s.upcase
)
)
eval_result
end
|