@@ -96,7 +96,7 @@ func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entit
96
96
}
97
97
}()
98
98
99
- decisionContext , featureDecision , err := o .getFeatureDecision (featureKey , userContext )
99
+ decisionContext , featureDecision , err := o .getFeatureDecision (featureKey , "" , userContext )
100
100
if err != nil {
101
101
logger .Error ("received an error while computing feature decision" , err )
102
102
return result , err
@@ -214,15 +214,12 @@ func (o *OptimizelyClient) GetFeatureVariableString(featureKey, variableKey stri
214
214
// GetFeatureVariable returns feature as a string along with it's associated type
215
215
func (o * OptimizelyClient ) GetFeatureVariable (featureKey , variableKey string , userContext entities.UserContext ) (value string , valueType entities.VariableType , err error ) {
216
216
217
- decisionContext , featureDecision , err := o .getFeatureDecision (featureKey , userContext )
217
+ featureDecisionContext , featureDecision , err := o .getFeatureDecision (featureKey , variableKey , userContext )
218
218
if err != nil {
219
219
return "" , "" , err
220
220
}
221
221
222
- variable , err := decisionContext .ProjectConfig .GetVariableByKey (featureKey , variableKey )
223
- if err != nil {
224
- return "" , "" , err
225
- }
222
+ variable := featureDecisionContext .Variable
226
223
227
224
if featureDecision .Variation != nil {
228
225
if v , ok := featureDecision .Variation .Variables [variable .ID ]; ok && featureDecision .Variation .FeatureEnabled {
@@ -237,7 +234,7 @@ func (o *OptimizelyClient) GetFeatureVariable(featureKey, variableKey string, us
237
234
func (o * OptimizelyClient ) GetAllFeatureVariables (featureKey string , userContext entities.UserContext ) (enabled bool , variableMap map [string ]string , err error ) {
238
235
239
236
variableMap = make (map [string ]string )
240
- decisionContext , featureDecision , err := o .getFeatureDecision (featureKey , userContext )
237
+ decisionContext , featureDecision , err := o .getFeatureDecision (featureKey , "" , userContext )
241
238
if err != nil {
242
239
logger .Error ("Optimizely SDK tracking error" , err )
243
240
return enabled , variableMap , err
@@ -335,7 +332,7 @@ func (o *OptimizelyClient) Track(eventKey string, userContext entities.UserConte
335
332
return nil
336
333
}
337
334
338
- func (o * OptimizelyClient ) getFeatureDecision (featureKey string , userContext entities.UserContext ) (decisionContext decision.FeatureDecisionContext , featureDecision decision.FeatureDecision , err error ) {
335
+ func (o * OptimizelyClient ) getFeatureDecision (featureKey , variableKey string , userContext entities.UserContext ) (decisionContext decision.FeatureDecisionContext , featureDecision decision.FeatureDecision , err error ) {
339
336
340
337
defer func () {
341
338
if r := recover (); r != nil {
@@ -368,9 +365,19 @@ func (o *OptimizelyClient) getFeatureDecision(featureKey string, userContext ent
368
365
return decisionContext , featureDecision , nil
369
366
}
370
367
368
+ variable := entities.Variable {}
369
+ if variableKey != "" {
370
+ variable , err = projectConfig .GetVariableByKey (feature .Key , variableKey )
371
+ if err != nil {
372
+ logger .Warning (fmt .Sprintf (`Could not get variable for key "%s": %s` , variableKey , err ))
373
+ return decisionContext , featureDecision , nil
374
+ }
375
+ }
376
+
371
377
decisionContext = decision.FeatureDecisionContext {
372
378
Feature : & feature ,
373
379
ProjectConfig : projectConfig ,
380
+ Variable : variable ,
374
381
}
375
382
376
383
featureDecision , err = o .DecisionService .GetFeatureDecision (decisionContext , userContext )
0 commit comments