@@ -24,9 +24,11 @@ class OptimizelyUserContext
24
24
25
25
attr_reader :user_id
26
26
attr_reader :forced_decisions
27
- attr_reader :ForcedDecision
27
+ attr_reader :OptimizelyDecisionContext
28
+ attr_reader :OptimizelyForcedDecision
28
29
29
- ForcedDecision = Struct . new ( :flag_key , :rule_key )
30
+ OptimizelyDecisionContext = Struct . new ( :flag_key , :rule_key )
31
+ OptimizelyForcedDecision = Struct . new ( :variation_key )
30
32
def initialize ( optimizely_client , user_id , user_attributes )
31
33
@attr_mutex = Mutex . new
32
34
@forced_decision_mutex = Mutex . new
@@ -94,59 +96,54 @@ def decide_all(options = nil)
94
96
95
97
# Sets the forced decision (variation key) for a given flag and an optional rule.
96
98
#
97
- # @param flag_key - A flag key.
98
- # @param rule_key - An experiment or delivery rule key (optional).
99
- # @param variation_key - A variation key.
99
+ # @param context - An OptimizelyDecisionContext object containg flag key and rule key.
100
+ # @param decision - An OptimizelyForcedDecision object containing variation key
100
101
#
101
102
# @return - true if the forced decision has been set successfully.
102
103
103
- def set_forced_decision ( flag_key , rule_key , variation_key )
104
+ def set_forced_decision ( context , decision )
8000
code>
105
+ flag_key = context [ :flag_key ]
104
106
return false if @optimizely_client &.get_optimizely_config . nil?
105
- return false if flag_key . empty? || flag_key . nil?
107
+ return false if flag_key . nil?
106
108
107
- forced_decision_key = ForcedDecision . new ( flag_key , rule_key )
108
- @forced_decision_mutex . synchronize { @forced_decisions [ forced_decision_key ] = variation_key }
109
+ @forced_decision_mutex . synchronize { @forced_decisions [ context ] = decision }
109
110
110
111
true
111
112
end
112
113
113
- def find_forced_decision ( flag_key , rule_key = nil )
114
+ def find_forced_decision ( context )
114
115
return nil if @forced_decisions . empty?
115
116
116
- variation_key = nil
117
- forced_decision_key = ForcedDecision . new ( flag_key , rule_key )
118
- @forced_decision_mutex . synchronize { variation_key = @forced_decisions [ forced_decision_key ] }
119
- variation_key
117
+ decision = nil
118
+ @forced_decision_mutex . synchronize { decision = @forced_decisions [ context ] }
119
+ decision
120
120
end
121
121
122
122
# Returns the forced decision for a given flag and an optional rule.
123
123
#
124
- # @param flag_key - A flag key.
125
- # @param rule_key - An experiment or delivery rule key (optional).
124
+ # @param context - An OptimizelyDecisionContext object containg flag key and rule key.
126
125
#
127
126
# @return - A variation key or nil if forced decisions are not set for the parameters.
128
127
129
- def get_forced_decision ( flag_key , rule_key = nil )
128
+ def get_forced_decision ( context )
130
129
return nil if @optimizely_client &.get_optimizely_config . nil?
131
130
132
- find_forced_decision ( flag_key , rule_key )
131
+ find_forced_decision ( context )
133
132
end
134
133
135
134
# Removes the forced decision for a given flag and an optional rule.
136
135
#
137
- # @param flag_key - A flag key.
138
- # @param rule_key - An experiment or delivery rule key (optional).
136
+ # @param context - An OptimizelyDecisionContext object containg flag key and rule key.
139
137
#
140
138
# @return - true if the forced decision has been removed successfully.
141
139
142
- def remove_forced_decision ( flag_key , rule_key = nil )
140
+ def remove_forced_decision ( context )
143
141
return false if @optimizely_client &.get_optimizely_config . nil?
144
142
145
- forced_decision_key = ForcedDecision . new ( flag_key , rule_key )
146
143
deleted = false
147
144
@forced_decision_mutex . synchronize do
148
- if @forced_decisions . key? ( forced_decision_key )
149
- @forced_decisions . delete ( forced_decision_key )
145
+ if @forced_decisions . key? ( context )
146
+ @forced_decisions . delete ( context )
150
147
deleted = true
151
148
end
152
149
end
@@ -164,8 +161,11 @@ def remove_all_forced_decision
164
161
true
165
162
end
166
163
167
- def find_validated_forced_decision ( flag_key , rule_key )
168
- variation_key = find_forced_decision ( flag_key , rule_key )
164
+ def find_validated_forced_decision ( context )
165
+ decision = find_forced_decision ( context )
166
+ flag_key = context [ :flag_key ]
167
+ rule_key = context [ :rule_key ]
168
+ variation_key = decision ? decision [ :variation_key ] : decision
169
169
reasons = [ ]
170
170
target = rule_key ? "flag (#{ flag_key } ), rule (#{ rule_key } )" : "flag (#{ flag_key } )"
171
171
if variation_key
0 commit comments