Skip to content

Commit 6ae6c76

Browse files
Merge pull request #3 from enverbisevac/main
set version to 0.0.3 and package name is v0 based on major version
2 parents 664c4a1 + 34e992e commit 6ae6c76

17 files changed

+138
-62
lines changed

cache/cache.go

+1-1
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

+1-1
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

+4-4
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

+10-7
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

+3-3
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

+3-3
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

+1-1
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

+8-14
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

+36-14
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

+1-1
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
)

evaluation/target_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"reflect"
55
"testing"
66

7-
"github.com/drone/ff-golang-server-sdk.v1/types"
7+
"github.com/drone/ff-golang-server-sdk.v0/types"
88
)
99

1010
func TestTarget_GetOperator(t1 *testing.T) {

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module github.com/drone/ff-golang-server-sdk.v1
1+
module github.com/drone/ff-golang-server-sdk.v0
22

33
go 1.14
44

go.sum

-5
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2
6666
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
6767
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
6868
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
69-
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
7069
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
7170
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
7271
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
@@ -75,11 +74,9 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC
7574
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
7675
github.com/valyala/fasttemplate v1.1.0 h1:RZqt0yGBsps8NGvLSGW804QQqCUYYLsaOjTVHy1Ocw4=
7776
github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
78-
go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
7977
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
8078
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
8179
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
82-
go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
8380
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
8481
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
8582
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
@@ -113,7 +110,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuF
113110
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
114111
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
115112
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
116-
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
117113
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
118114
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
119115
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -131,7 +127,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
131127
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
132128
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
133129
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
134-
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
135130
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
136131
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
137132
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

rest/adapter.go

+63-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package rest
22

3-
import "github.com/drone/ff-golang-server-sdk.v1/evaluation"
3+
import "github.com/drone/ff-golang-server-sdk.v0/evaluation"
44

55
func (wv WeightedVariation) convert() *evaluation.WeightedVariation {
66
return &evaluation.WeightedVariation{
@@ -112,3 +112,65 @@ func (fc FeatureConfig) Convert() *evaluation.FeatureConfig {
112112
Variations: vars,
113113
}
114114
}
115+
116+
// Convert REST segment response to evaluation segment object
117+
func (s Segment) Convert() evaluation.Segment {
118+
// need openspec change: included, excluded and rules should be required in response
119+
excluded := make(evaluation.StrSlice, 0)
120+
if s.Excluded != nil {
121+
excluded = make(evaluation.StrSlice, len(*s.Excluded))
122+
for i, excl := range *s.Excluded {
123+
excluded[i] = excl
124+
}
125+
}
126+
127+
included := make(evaluation.StrSlice, 0)
128+
if s.Included != nil {
129+
included = make(evaluation.StrSlice, len(*s.Included))
130+
for i, incl := range *s.Included {
131+
included[i] = incl
132+
}
133+
}
134+
135+
rules := make(evaluation.Clauses, 0)
136+
if s.Rules != nil {
137+
rules = make(evaluation.Clauses, len(*s.Rules))
138+
for i, rule := range *s.Rules {
139+
rules[i] = evaluation.Clause{
140+
Attribute: rule.Attribute,
141+
ID: rule.Id,
142+
Negate: rule.Negate,
143+
Op: rule.Op,
144+
Value: rule.Values,
145+
}
146+
}
147+
}
148+
149+
tags := make([]evaluation.Tag, 0)
150+
if s.Rules != nil {
151+
tags = make([]evaluation.Tag, len(*s.Tags))
152+
for i, tag := range *s.Tags {
153+
tags[i] = evaluation.Tag{
154+
Name: tag.Name,
155+
Value: tag.Value,
156+
}
157+
}
158+
}
159+
160+
var version int64
161+
if s.Version != nil {
162+
version = *s.Version
163+
}
164+
return evaluation.Segment{
165+
Identifier: s.Identifier,
166+
Name: s.Name,
167+
CreatedAt: s.CreatedAt,
168+
ModifiedAt: s.ModifiedAt,
169+
Environment: s.Environment,
170+
Excluded: excluded,
171+
Included: included,
172+
Rules: rules,
173+
Tags: tags,
174+
Version: version,
175+
}
176+
}

storage/file.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package storage
33
import (
44
"fmt"
55

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

88
jsoniter "github.com/json-iterator/go"
99

0 commit comments

Comments
 (0)