Skip to content

Commit c851583

Browse files
authored
Merge pull request #1 from enverbisevac/setup-versioning
setup versioning and fixed issue with segmentMatch operator
2 parents a2303ae + bd30f77 commit c851583

File tree

17 files changed

+138
-62
lines changed

17 files changed

+138
-62
lines changed

cache/cache.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package cache
22

33
import (
4-
"github.com/drone/ff-golang-server-sdk.v1/logger"
4+
"github.com/drone/ff-golang-server-sdk.v0/logger"
55

66
"time"
77
)

cache/lru.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package cache
22

33
import (
4-
"github.com/drone/ff-golang-server-sdk.v1/logger"
4+
"github.com/drone/ff-golang-server-sdk.v0/logger"
55
lru "github.com/hashicorp/golang-lru"
66

77
"reflect"

cache/persist.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package cache
22

33
import (
4-
"github.com/drone/ff-golang-server-sdk.v1/dto"
5-
"github.com/drone/ff-golang-server-sdk.v1/evaluation"
6-
"github.com/drone/ff-golang-server-sdk.v1/logger"
7-
"github.com/drone/ff-golang-server-sdk.v1/storage"
4+
"github.com/drone/ff-golang-server-sdk.v0/dto"
5+
"github.com/drone/ff-golang-server-sdk.v0/evaluation"
6+
"github.com/drone/ff-golang-server-sdk.v0/logger"
7+
"github.com/drone/ff-golang-server-sdk.v0/storage"
88
"github.com/mitchellh/mapstructure"
99
)
1010

client/client.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ import (
1212

1313
"github.com/deepmap/oapi-codegen/pkg/securityprovider"
1414
"github.com/dgrijalva/jwt-go"
15-
"github.com/drone/ff-golang-server-sdk.v1/cache"
16-
"github.com/drone/ff-golang-server-sdk.v1/dto"
17-
"github.com/drone/ff-golang-server-sdk.v1/evaluation"
18-
"github.com/drone/ff-golang-server-sdk.v1/rest"
19-
"github.com/drone/ff-golang-server-sdk.v1/stream"
20-
"github.com/drone/ff-golang-server-sdk.v1/types"
15+
"github.com/drone/ff-golang-server-sdk.v0/cache"
16+
"github.com/drone/ff-golang-server-sdk.v0/dto"
17+
"github.com/drone/ff-golang-server-sdk.v0/evaluation"
18+
"github.com/drone/ff-golang-server-sdk.v0/rest"
19+
"github.com/drone/ff-golang-server-sdk.v0/stream"
20+
"github.com/drone/ff-golang-server-sdk.v0/types"
2121
"github.com/hashicorp/go-retryablehttp"
2222
"github.com/r3labs/sse"
2323
)
@@ -300,7 +300,7 @@ func (c *CfClient) retrieveSegments(ctx context.Context) error {
300300
c.config.Cache.Set(dto.Key{
301301
Type: dto.KeySegment,
302302
Name: segment.Identifier,
303-
}, segment)
303+
}, segment.Convert())
304304
}
305305
c.config.Logger.Info("Retrieving segments finished")
306306
return nil
@@ -327,6 +327,9 @@ func (c *CfClient) getSegmentsFromCache(fc *evaluation.FeatureConfig) {
327327
})
328328
segment, ok := value.(evaluation.Segment)
329329
if ok {
330+
if fc.Segments == nil {
331+
fc.Segments = make(map[string]*evaluation.Segment)
332+
}
330333
fc.Segments[segmentIdentifier] = &segment
331334
}
332335
}

client/config.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package client
33
import (
44
"log"
55

6-
"github.com/drone/ff-golang-server-sdk.v1/cache"
7-
"github.com/drone/ff-golang-server-sdk.v1/logger"
8-
"github.com/drone/ff-golang-server-sdk.v1/storage"
6+
"github.com/drone/ff-golang-server-sdk.v0/cache"
7+
"github.com/drone/ff-golang-server-sdk.v0/logger"
8+
"github.com/drone/ff-golang-server-sdk.v0/storage"
99
)
1010

1111
type config struct {

client/options.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package client
22

33
import (
4-
"github.com/drone/ff-golang-server-sdk.v1/cache"
5-
"github.com/drone/ff-golang-server-sdk.v1/logger"
6-
"github.com/drone/ff-golang-server-sdk.v1/storage"
4+
"github.com/drone/ff-golang-server-sdk.v0/cache"
5+
"github.com/drone/ff-golang-server-sdk.v0/logger"
6+
"github.com/drone/ff-golang-server-sdk.v0/storage"
77
)
88

99
// ConfigOption is used as return value for advanced client configuration

dto/target_builder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dto
22

33
import (
4-
"github.com/drone/ff-golang-server-sdk.v1/evaluation"
4+
"github.com/drone/ff-golang-server-sdk.v0/evaluation"
55
)
66

77
// TargetBuilderInterface used for fluent builder methods

evaluation/feature.go

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package evaluation
33
import (
44
"encoding/json"
55

6-
"github.com/drone/ff-golang-server-sdk.v1/types"
6+
"github.com/drone/ff-golang-server-sdk.v0/types"
77

88
"reflect"
99
"strconv"
@@ -40,7 +40,10 @@ type Clause struct {
4040
func (c *Clause) Evaluate(target *Target, segments Segments, operator types.ValueType) bool {
4141
switch c.Op {
4242
case segmentMatchOperator:
43-
return c.segmentMatch(target, segments)
43+
if segments == nil {
44+
return false
45+
}
46+
return segments.Evaluate(target)
4447
case inOperator:
4548
return operator.In(c.Value)
4649
case equalOperator:
@@ -59,25 +62,16 @@ func (c *Clause) Evaluate(target *Target, segments Segments, operator types.Valu
5962
return false
6063
}
6164

62-
// segmentMatch should expect array of string (targetSegment key)
63-
// segment match should process Segment rules
64-
func (c *Clause) segmentMatch(target *Target, segments Segments) bool {
65-
if c.Op != segmentMatchOperator || segments == nil {
66-
return false // should we return error ?
67-
}
68-
69-
return segments.Evaluate(target)
70-
}
71-
7265
// Clauses slice
7366
type Clauses []Clause
7467

7568
// Evaluate clauses using target but it can be used also with segments if Op field is segmentMach
7669
func (c Clauses) Evaluate(target *Target, segments Segments) bool {
70+
// AND operation
7771
for _, clause := range c {
78-
// AND operation
72+
// operator should be evaluated based on type of attribute
7973
op := target.GetOperator(clause.Attribute)
80-
if op == nil || !clause.Evaluate(target, segments, op) {
74+
if !clause.Evaluate(target, segments, op) {
8175
return false
8276
}
8377
// continue on next clause

evaluation/feature_test.go

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package evaluation
33
import (
44
"encoding/json"
55

6-
"github.com/drone/ff-golang-server-sdk.v1/types"
6+
"github.com/drone/ff-golang-server-sdk.v0/types"
77

88
"reflect"
99
"strconv"
@@ -436,10 +436,21 @@ func TestFeatureConfig_IntVariation(t *testing.T) {
436436

437437
func TestServingRules_GetVariationName(t *testing.T) {
438438

439+
dev := "dev"
439440
harness := "Harness"
440441
onVariationIdentifier := "v1"
441442
offVariationIdentifier := "v2"
442443

444+
segment := &Segment{
445+
Identifier: "beta",
446+
Name: "beta",
447+
Environment: &dev,
448+
Included: []string{harness},
449+
Rules: nil,
450+
Tags: nil,
451+
Version: 1,
452+
}
453+
443454
target := &Target{
444455
Identifier: harness,
445456
Name: &harness,
@@ -491,6 +502,24 @@ func TestServingRules_GetVariationName(t *testing.T) {
491502
Distribution *Distribution
492503
Variation *string
493504
}{Distribution: nil, Variation: &onVariationIdentifier}}, want: offVariationIdentifier},
505+
//
506+
{name: "segment match", sr: []ServingRule{
507+
{Clauses: []Clause{
508+
{Op: segmentMatchOperator, Value: []string{
509+
segment.Identifier,
510+
}},
511+
}, Priority: 0, RuleID: uuid.NewString(), Serve: struct {
512+
Distribution *Distribution
513+
Variation *string
514+
}{Distribution: nil, Variation: &offVariationIdentifier}},
515+
}, args: struct {
516+
target *Target
517+
segments Segments
518+
defaultServe Serve
519+
}{target: target, segments: Segments{segment.Identifier: segment}, defaultServe: struct {
520+
Distribution *Distribution
521+
Variation *string
522+
}{Distribution: nil, Variation: &onVariationIdentifier}}, want: offVariationIdentifier},
494523
}
495524
for _, tt := range tests {
496525
val := tt
@@ -618,31 +647,24 @@ func TestClause_Evaluate(t *testing.T) {
618647
args args
619648
want bool
620649
}{
621-
{name: "segment match operator", fields: struct {
650+
{name: "segment match operator (include)", fields: struct {
622651
Attribute string
623652
ID string
624653
Negate bool
625654
Op string
626655
Value []string
627-
}{Attribute: "identifier", ID: uuid.New().String(), Negate: false, Op: segmentMatchOperator, Value: []string{"beta"}},
656+
}{Op: segmentMatchOperator, Value: []string{"beta"}},
628657
args: struct {
629658
target *Target
630659
segments Segments
631660
operator types.ValueType
632661
}{target: &target, segments: map[string]*Segment{
633662
"beta": {
634-
Identifier: "beta",
635-
Name: "Beta users",
636-
CreatedAt: nil,
637-
ModifiedAt: nil,
638-
Environment: nil,
639-
Excluded: nil,
640-
Included: []string{target.Identifier},
641-
Rules: nil,
642-
Tags: nil,
643-
Version: 0,
663+
Identifier: "beta",
664+
Name: "Beta users",
665+
Included: []string{target.Identifier},
644666
},
645-
}, operator: types.String("[email protected]")}, want: true},
667+
}, operator: nil}, want: true},
646668
}
647669
for _, tt := range tests {
648670
val := tt

evaluation/target.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package evaluation
22

33
import (
4-
"github.com/drone/ff-golang-server-sdk.v1/types"
4+
"github.com/drone/ff-golang-server-sdk.v0/types"
55

66
"reflect"
77
)

0 commit comments

Comments
 (0)