Skip to content

Commit 14b8686

Browse files
feat: exposing variable on FeatureDecisionContext (#178)
exposing variable on FeatureDecision and FeatureDecisionContext
1 parent 0343bbb commit 14b8686

File tree

7 files changed

+307
-43
lines changed

7 files changed

+307
-43
lines changed

pkg/client/client.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entit
9696
}
9797
}()
9898

99-
decisionContext, featureDecision, err := o.getFeatureDecision(featureKey, userContext)
99+
decisionContext, featureDecision, err := o.getFeatureDecision(featureKey, "", userContext)
100100
if err != nil {
101101
logger.Error("received an error while computing feature decision", err)
102102
return result, err
@@ -214,15 +214,12 @@ func (o *OptimizelyClient) GetFeatureVariableString(featureKey, variableKey stri
214214
// GetFeatureVariable returns feature as a string along with it's associated type
215215
func (o *OptimizelyClient) GetFeatureVariable(featureKey, variableKey string, userContext entities.UserContext) (value string, valueType entities.VariableType, err error) {
216216

217-
decisionContext, featureDecision, err := o.getFeatureDecision(featureKey, userContext)
217+
featureDecisionContext, featureDecision, err := o.getFeatureDecision(featureKey, variableKey, userContext)
218218
if err != nil {
219219
return "", "", err
220220
}
221221

222-
variable, err := decisionContext.ProjectConfig.GetVariableByKey(featureKey, variableKey)
223-
if err != nil {
224-
return "", "", err
225-
}
222+
variable := featureDecisionContext.Variable
226223

227224
if featureDecision.Variation != nil {
228225
if v, ok := featureDecision.Variation.Variables[variable.ID]; ok && featureDecision.Variation.FeatureEnabled {
@@ -237,7 +234,7 @@ func (o *OptimizelyClient) GetFeatureVariable(featureKey, variableKey string, us
237234
func (o *OptimizelyClient) GetAllFeatureVariables(featureKey string, userContext entities.UserContext) (enabled bool, variableMap map[string]string, err error) {
238235

239236
variableMap = make(map[string]string)
240-
decisionContext, featureDecision, err := o.getFeatureDecision(featureKey, userContext)
237+
decisionContext, featureDecision, err := o.getFeatureDecision(featureKey, "", userContext)
241238
if err != nil {
242239
logger.Error("Optimizely SDK tracking error", err)
243240
return enabled, variableMap, err
@@ -335,7 +332,7 @@ func (o *OptimizelyClient) Track(eventKey string, userContext entities.UserConte
335332
return nil
336333
}
337334

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) {
339336

340337
defer func() {
341338
if r := recover(); r != nil {
@@ -368,9 +365,19 @@ func (o *OptimizelyClient) getFeatureDecision(featureKey string, userContext ent
368365
return decisionContext, featureDecision, nil
369366
}
370367

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+
371377
decisionContext = decision.FeatureDecisionContext{
372378
Feature: &feature,
373379
ProjectConfig: projectConfig,
380+
Variable: variable,
374381
}
375382

376383
featureDecision, err = o.DecisionService.GetFeatureDecision(decisionContext, userContext)

0 commit comments

Comments
 (0)