@@ -2,6 +2,7 @@ package evaluation
2
2
3
3
import (
4
4
"encoding/json"
5
+ "errors"
5
6
"fmt"
6
7
"regexp"
7
8
"sort"
@@ -27,11 +28,16 @@ const (
27
28
equalSensitiveOperator = "equal_sensitive"
28
29
)
29
30
31
+ var (
32
+ ErrNilFlag = errors .New ("flag is nil" )
33
+ )
34
+
30
35
// Query provides methods for segment and flag retrieval
31
36
type Query interface {
32
37
GetSegment (identifier string ) (rest.Segment , error )
33
38
GetFlag (identifier string ) (rest.FeatureConfig , error )
34
39
GetFlags () ([]rest.FeatureConfig , error )
40
+ GetFlagMap () (map [string ]* rest.FeatureConfig , error )
35
41
}
36
42
37
43
// FlagVariations list of FlagVariations
@@ -329,7 +335,7 @@ func (e Evaluator) EvaluateAll(target *Target) (FlagVariations, error) {
329
335
// takes uses feature store.List function to get all the flags.
330
336
func (e Evaluator ) evaluateAll (target * Target ) ([]FlagVariation , error ) {
331
337
var variations []FlagVariation
332
- flags , err := e .query .GetFlags ()
338
+ flags , err := e .query .GetFlagMap ()
333
339
if err != nil {
334
340
return variations , err
335
341
}
@@ -358,29 +364,32 @@ func (e Evaluator) evaluate(identifier string, target *Target) (FlagVariation, e
358
364
return FlagVariation {}, err
359
365
}
360
366
361
- variation , err := e .getVariationForTheFlag (flag , target )
367
+ variation , err := e .getVariationForTheFlag (& flag , target )
362
368
if err != nil {
363
369
return FlagVariation {}, err
364
370
}
365
371
return FlagVariation {flag .Feature , flag .Kind , variation }, nil
366
372
}
367
373
368
374
// evaluates the flag and returns a proper variation.
369
- func (e Evaluator ) getVariationForTheFlag (flag rest.FeatureConfig , target * Target ) (rest.Variation , error ) {
375
+ func (e Evaluator ) getVariationForTheFlag (flag * rest.FeatureConfig , target * Target ) (rest.Variation , error ) {
376
+ if flag == nil {
377
+ return rest.Variation {}, ErrNilFlag
378
+ }
370
379
371
380
if flag .Prerequisites != nil {
372
- prereq , err := e .checkPreRequisite (& flag , target )
381
+ prereq , err := e .checkPreRequisite (flag , target )
373
382
if err != nil || ! prereq {
374
383
return findVariation (flag .Variations , flag .OffVariation )
375
384
}
376
385
}
377
- variation , err := e .evaluateFlag (flag , target )
386
+ variation , err := e .evaluateFlag (* flag , target )
378
387
if err != nil {
379
388
return rest.Variation {}, err
380
389
}
381
390
if e .postEvalCallback != nil {
382
391
data := PostEvalData {
383
- FeatureConfig : & flag ,
392
+ FeatureConfig : flag ,
384
393
Target : target ,
385
394
Variation : & variation ,
386
395
}
0 commit comments