Skip to content

Commit d3101c2

Browse files
author
Mike Davis
authored
Replace isValidClient with GetProjectConfig. (#84)
1 parent 24bdcd9 commit d3101c2

File tree

8 files changed

+146
-95
lines changed

8 files changed

+146
-95
lines changed

.travis.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@ before_install:
66
- go get github.com/mattn/goveralls
77
git:
88
depth: 1
9-
10-
before_script:
11-
- go get -u golang.org/x/lint/golint
129
script:
13-
- golint ./...
1410
- go test -v -race ./... -coverprofile=profile.cov
1511
- $GOPATH/bin/goveralls -coverprofile=profile.cov -service=travis-ci
1612
stages:
@@ -24,7 +20,6 @@ jobs:
2420
- go get github.com/golangci/golangci-lint/cmd/golangci-lint
2521
script:
2622
- golangci-lint run --out-format=tab --tests=false optimizely/...
27-
2823
- stage: 'Integration Tests'
2924
merge_mode: replace
3025
env: SDK=go

optimizely/client/client.go

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"context"
2222
"errors"
2323
"fmt"
24-
"reflect"
2524
"runtime/debug"
2625
"strconv"
2726

@@ -56,16 +55,16 @@ func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entit
5655
}
5756
}()
5857

59-
var isValid bool
60-
if isValid, err = o.isValidClient("IsFeatureEnabled"); !isValid {
58+
projectConfig, err := o.GetProjectConfig()
59+
if err != nil {
60+
logger.Error("Error retrieving feature", err)
6161
return false, err
6262
}
6363

64-
projectConfig := o.configManager.GetConfig()
65-
feature, e := projectConfig.GetFeatureByKey(featureKey)
66-
if e != nil {
67-
logger.Error("Error retrieving feature", e)
68-
return result, e
64+
feature, err := projectConfig.GetFeatureByKey(featureKey)
65+
if err != nil {
66+
logger.Error("Error retrieving feature", err)
67+
return result, err
6968
}
7069
featureDecisionContext := decision.FeatureDecisionContext{
7170
Feature: &feature,
@@ -74,11 +73,11 @@ func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entit
7473

7574
userID := userContext.ID
7675
logger.Debug(fmt.Sprintf(`Evaluating feature "%s" for user "%s".`, featureKey, userID))
77-
featureDecision, e1 := o.decisionService.GetFeatureDecision(featureDecisionContext, userContext)
76+
featureDecision, err := o.decisionService.GetFeatureDecision(featureDecisionContext, userContext)
7877

79-
if e1 != nil {
80-
logger.Error("received an error while computing feature decision", e1)
81-
return result, e1
78+
if err != nil {
79+
logger.Error("received an error while computing feature decision", err)
80+
return result, err
8281
}
8382

8483
if featureDecision.Variation == nil {
@@ -112,11 +111,12 @@ func (o *OptimizelyClient) GetEnabledFeatures(userContext entities.UserContext)
112111
}
113112
}()
114113

115-
if isValid, err := o.isValidClient("GetEnabledFeatures"); !isValid {
114+
projectConfig, err := o.GetProjectConfig()
115+
if err != nil {
116+
logger.Error("Error retrieving ProjectConfig", err)
116117
return enabledFeatures, err
117118
}
118119

119-
projectConfig := o.configManager.GetConfig()
120120
featureList := projectConfig.GetFeatureList()
121121
for _, feature := range featureList {
122122
isEnabled, _ := o.IsFeatureEnabled(feature.Key, userContext)
@@ -146,15 +146,21 @@ func (o *OptimizelyClient) Track(eventKey string, userContext entities.UserConte
146146
}
147147
}()
148148

149-
configEvent, eventError := o.configManager.GetConfig().GetEventByKey(eventKey)
149+
projectConfig, err := o.GetProjectConfig()
150+
if err != nil {
151+
logger.Error("Optimizely SDK tracking error", err)
152+
return err
153+
}
154+
155+
configEvent, err := projectConfig.GetEventByKey(eventKey)
150156

151-
if eventError == nil {
152-
userEvent := event.CreateConversionUserEvent(o.configManager.GetConfig(), configEvent, userContext, eventTags)
157+
if err == nil {
158+
userEvent := event.CreateConversionUserEvent(projectConfig, configEvent, userContext, eventTags)
153159
o.eventProcessor.ProcessEvent(userEvent)
154160
} else {
155161
errorMessage := fmt.Sprintf(`optimizely SDK track: error getting event with key "%s"`, eventKey)
156-
logger.Error(errorMessage, eventError)
157-
return eventError
162+
logger.Error(errorMessage, err)
163+
return err
158164
}
159165

160166
return nil
@@ -221,34 +227,33 @@ func (o *OptimizelyClient) getFeatureVariable(featureKey, variableKey string, us
221227
}
222228
}()
223229

224-
var isValid bool
225-
if isValid, err = o.isValidClient("getFeatureVariable"); !isValid {
230+
projectConfig, err := o.GetProjectConfig()
231+
if err != nil {
232+
logger.Error("Error calling getFeatureVariable", err)
226233
return "", "", err
227234
}
228235

229-
projectConfig := o.configManager.GetConfig()
230-
231-
feature, e := projectConfig.GetFeatureByKey(featureKey)
232-
if e != nil {
233-
logger.Error("error retrieving feature", e)
234-
return "", "", e
236+
feature, err := projectConfig.GetFeatureByKey(featureKey)
237+
if err != nil {
238+
logger.Error("Error calling getFeatureVariable", err)
239+
return "", "", err
235240
}
236241

237-
variable, e1 := projectConfig.GetVariableByKey(featureKey, variableKey)
238-
if e1 != nil {
239-
logger.Error("error retrieving variable", e1)
240-
return "", "", e1
242+
variable, err := projectConfig.GetVariableByKey(featureKey, variableKey)
243+
if err != nil {
244+
logger.Error("Error calling getFeatureVariable", err)
245+
return "", "", err
241246
}
242247

243-
var featureValue = variable.DefaultValue
248+
featureValue := variable.DefaultValue
244249

245250
featureDecisionContext := decision.FeatureDecisionContext{
246251
Feature: &feature,
247252
ProjectConfig: projectConfig,
248253
}
249254

250-
featureDecision, e2 := o.decisionService.GetFeatureDecision(featureDecisionContext, userContext)
251-
if e2 == nil && featureDecision.Variation != nil {
255+
featureDecision, err := o.decisionService.GetFeatureDecision(featureDecisionContext, userContext)
256+
if err == nil && featureDecision.Variation != nil {
252257
if v, ok := featureDecision.Variation.Variables[variable.ID]; ok && featureDecision.Variation.FeatureEnabled {
253258
featureValue = v.Value
254259
}
@@ -258,18 +263,18 @@ func (o *OptimizelyClient) getFeatureVariable(featureKey, variableKey string, us
258263
return featureValue, variable.Type, nil
259264
}
260265

261-
func (o *OptimizelyClient) isValidClient(methodName string) (result bool, err error) {
266+
// GetProjectConfig returns the current ProjectConfig or nil if the instance is not valid
267+
func (o *OptimizelyClient) GetProjectConfig() (projectConfig optimizely.ProjectConfig, err error) {
262268
if !o.isValid {
263-
errorMessage := fmt.Sprintf("optimizely instance is not valid. Failing %s.", methodName)
264-
err := errors.New(errorMessage)
265-
logger.Error(errorMessage, nil)
266-
return false, err
269+
return nil, fmt.Errorf("optimizely instance is not valid")
267270
}
268271

269-
if reflect.ValueOf(o.configManager.GetConfig()).IsNil() {
270-
return false, fmt.Errorf("project config is null")
272+
projectConfig, err = o.configManager.GetConfig()
273+
if err != nil {
274+
return nil, err
271275
}
272-
return true, nil
276+
277+
return projectConfig, nil
273278
}
274279

275280
// Close closes the Optimizely instance and stops any ongoing tasks from its children components

0 commit comments

Comments
 (0)