Class: Optimizely::OptimizelyUserContext
- Inherits:
-
Object
- Object
- Optimizely::OptimizelyUserContext
- Defined in:
- lib/optimizely/optimizely_user_context.rb
Defined Under Namespace
Classes: OptimizelyDecisionContext, OptimizelyForcedDecision
Instance Attribute Summary collapse
-
#forced_decisions ⇒ Object
readonly
Representation of an Optimizely User Context using which APIs are to be called.
-
#optimizely_client ⇒ Object
readonly
Representation of an Optimizely User Context using which APIs are to be called.
-
#user_id ⇒ Object
readonly
Representation of an Optimizely User Context using which APIs are to be called.
Instance Method Summary collapse
- #as_json ⇒ Object
- #clone ⇒ Object
-
#decide(key, options = nil) ⇒ OptimizelyDecision
Returns a decision result (OptimizelyDecision) for a given flag key and a user context, which contains all data required to deliver the flag.
-
#decide_all(options = nil) ⇒ Object
Returns a hash of decision results (OptimizelyDecision) for all active flag keys.
-
#decide_for_keys(keys, options = nil) ⇒ Object
Returns a hash of decision results (OptimizelyDecision) for multiple flag keys and a user context.
- #find_forced_decision(context) ⇒ Object
-
#get_forced_decision(context) ⇒ Object
Returns the forced decision for a given flag and an optional rule.
-
#initialize(optimizely_client, user_id, user_attributes) ⇒ OptimizelyUserContext
constructor
A new instance of OptimizelyUserContext.
-
#qualified_for?(segment) ⇒ Boolean
Checks if user is qualified for the provided segment.
-
#qualified_segments ⇒ Object
Returns An array of qualified segments for this user.
-
#qualified_segments=(segments) ⇒ Object
Replace qualified segments with provided segments.
-
#remove_all_forced_decisions ⇒ Object
Removes all forced decisions bound to this user context.
-
#remove_forced_decision(context) ⇒ Object
Removes the forced decision for a given flag and an optional rule.
-
#set_attribute(attribute_key, attribute_value) ⇒ Object
Set an attribute for a given key.
-
#set_forced_decision(context, decision) ⇒ Object
Sets the forced decision (variation key) for a given flag and an optional rule.
- #to_json(*args) ⇒ Object
-
#track_event(event_key, event_tags = nil) ⇒ Object
Track an event.
- #user_attributes ⇒ Object
Constructor Details
#initialize(optimizely_client, user_id, user_attributes) ⇒ OptimizelyUserContext
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/optimizely/optimizely_user_context.rb', line 29 def initialize(optimizely_client, user_id, user_attributes) @attr_mutex = Mutex.new @forced_decision_mutex = Mutex.new @qualified_segment_mutex = Mutex.new @optimizely_client = optimizely_client @user_id = user_id @user_attributes = user_attributes.nil? ? {} : user_attributes.clone @forced_decisions = {} @qualified_segments = [] end |
Instance Attribute Details
#forced_decisions ⇒ Object (readonly)
Representation of an Optimizely User Context using which APIs are to be called.
25 26 27 |
# File 'lib/optimizely/optimizely_user_context.rb', line 25 def forced_decisions @forced_decisions end |
#optimizely_client ⇒ Object (readonly)
Representation of an Optimizely User Context using which APIs are to be called.
25 26 27 |
# File 'lib/optimizely/optimizely_user_context.rb', line 25 def optimizely_client @optimizely_client end |
#user_id ⇒ Object (readonly)
Representation of an Optimizely User Context using which APIs are to be called.
25 26 27 |
# File 'lib/optimizely/optimizely_user_context.rb', line 25 def user_id @user_id end |
Instance Method Details
#as_json ⇒ Object
167 168 169 170 171 172 |
# File 'lib/optimizely/optimizely_user_context.rb', line 167 def as_json { user_id: @user_id, attributes: @user_attributes } end |
#clone ⇒ Object
40 41 42 43 44 45 |
# File 'lib/optimizely/optimizely_user_context.rb', line 40 def clone user_context = OptimizelyUserContext.new(@optimizely_client, @user_id, user_attributes) @forced_decision_mutex.synchronize { user_context.instance_variable_set('@forced_decisions', @forced_decisions.dup) unless @forced_decisions.empty? } @qualified_segment_mutex.synchronize { user_context.instance_variable_set('@qualified_segments', @qualified_segments.dup) unless @qualified_segments.empty? } user_context end |
#decide(key, options = nil) ⇒ OptimizelyDecision
Returns a decision result (OptimizelyDecision) for a given flag key and a user context, which contains all data required to deliver the flag.
If the SDK finds an error, it’ll return a ‘decision` with nil for `variation_key`. The decision will include an error message in `reasons`
69 70 71 |
# File 'lib/optimizely/optimizely_user_context.rb', line 69 def decide(key, = nil) @optimizely_client&.decide(clone, key, ) end |
#decide_all(options = nil) ⇒ Object
Returns a hash of decision results (OptimizelyDecision) for all active flag keys.
93 94 95 |
# File 'lib/optimizely/optimizely_user_context.rb', line 93 def decide_all( = nil) @optimizely_client&.decide_all(clone, ) end |
#decide_for_keys(keys, options = nil) ⇒ Object
Returns a hash of decision results (OptimizelyDecision) for multiple flag keys and a user context.
If the SDK finds an error for a key, the response will include a decision for the key showing ‘reasons` for the error. The SDK will always return hash of decisions. When it can not process requests, it’ll return an empty hash after logging the errors.
83 84 85 |
# File 'lib/optimizely/optimizely_user_context.rb', line 83 def decide_for_keys(keys, = nil) @optimizely_client&.decide_for_keys(clone, keys, ) end |
#find_forced_decision(context) ⇒ Object
113 114 115 116 117 118 119 |
# File 'lib/optimizely/optimizely_user_context.rb', line 113 def find_forced_decision(context) return nil if @forced_decisions.empty? decision = nil @forced_decision_mutex.synchronize { decision = @forced_decisions[context] } decision end |
#get_forced_decision(context) ⇒ Object
Returns the forced decision for a given flag and an optional rule.
127 128 129 |
# File 'lib/optimizely/optimizely_user_context.rb', line 127 def get_forced_decision(context) find_forced_decision(context) end |
#qualified_for?(segment) ⇒ Boolean
Checks if user is qualified for the provided segment.
198 199 200 201 202 |
# File 'lib/optimizely/optimizely_user_context.rb', line 198 def qualified_for?(segment) return false if @qualified_segments.empty? @qualified_segment_mutex.synchronize { @qualified_segments.include?(segment) } end |
#qualified_segments ⇒ Object
Returns An array of qualified segments for this user
182 183 184 |
# File 'lib/optimizely/optimizely_user_context.rb', line 182 def qualified_segments @qualified_segment_mutex.synchronize { @qualified_segments.clone } end |
#qualified_segments=(segments) ⇒ Object
Replace qualified segments with provided segments
190 191 192 |
# File 'lib/optimizely/optimizely_user_context.rb', line 190 def qualified_segments=(segments) @qualified_segment_mutex.synchronize { @qualified_segments = segments.clone } end |
#remove_all_forced_decisions ⇒ Object
Removes all forced decisions bound to this user context.
152 153 154 155 156 157 |
# File 'lib/optimizely/optimizely_user_context.rb', line 152 def remove_all_forced_decisions return false if @optimizely_client&.get_optimizely_config.nil? @forced_decision_mutex.synchronize { @forced_decisions.clear } true end |
#remove_forced_decision(context) ⇒ Object
Removes the forced decision for a given flag and an optional rule.
137 138 139 140 141 142 143 144 145 146 |
# File 'lib/optimizely/optimizely_user_context.rb', line 137 def remove_forced_decision(context) deleted = false @forced_decision_mutex.synchronize do if @forced_decisions.key?(context) @forced_decisions.delete(context) deleted = true end end deleted end |
#set_attribute(attribute_key, attribute_value) ⇒ Object
Set an attribute for a given key
56 57 58 |
# File 'lib/optimizely/optimizely_user_context.rb', line 56 def set_attribute(attribute_key, attribute_value) @attr_mutex.synchronize { @user_attributes[attribute_key] = attribute_value } end |
#set_forced_decision(context, decision) ⇒ Object
Sets the forced decision (variation key) for a given flag and an optional rule.
104 105 106 107 108 109 110 111 |
# File 'lib/optimizely/optimizely_user_context.rb', line 104 def set_forced_decision(context, decision) flag_key = context[:flag_key] return false if flag_key.nil? @forced_decision_mutex.synchronize { @forced_decisions[context] = decision } true end |
#to_json(*args) ⇒ Object
174 175 176 |
# File 'lib/optimizely/optimizely_user_context.rb', line 174 def to_json(*args) as_json.to_json(*args) end |
#track_event(event_key, event_tags = nil) ⇒ Object
Track an event
163 164 165 |
# File 'lib/optimizely/optimizely_user_context.rb', line 163 def track_event(event_key, = nil) @optimizely_client&.track(event_key, @user_id, user_attributes, ) end |
#user_attributes ⇒ Object
47 48 49 |
# File 'lib/optimizely/optimizely_user_context.rb', line 47 def user_attributes @attr_mutex.synchronize { @user_attributes.clone } end |