Skip to content

Commit 55f450c

Browse files
committed
improved spec handling
1 parent 62906f3 commit 55f450c

File tree

5 files changed

+48
-45
lines changed

5 files changed

+48
-45
lines changed

service/api/http_fetchers_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func TestSpitChangesFetch(t *testing.T) {
4040
if r.URL.Query().Get("sets") != "" {
4141
t.Error("wrong sets")
4242
}
43-
if r.URL.Query().Get("s") != specs.FLAG_V1_1 {
43+
if r.URL.Query().Get("s") != specs.FlagSpecs[1] {
4444
t.Error("wrong spec")
4545
}
4646
if r.URL.RawQuery != "s=1.1&since=123456" {
@@ -55,7 +55,7 @@ func TestSpitChangesFetch(t *testing.T) {
5555
conf.AdvancedConfig{
5656
EventsURL: ts.URL,
5757
SdkURL: ts.URL,
58-
FlagsSpecVersion: specs.FLAG_V1_1,
58+
FlagsSpecVersion: specs.FlagSpecs[1],
5959
},
6060
logger,
6161
dtos.Metadata{},
@@ -213,7 +213,7 @@ func TestSpitChangesFetchWithAll(t *testing.T) {
213213
EventsURL: ts.URL,
214214
SdkURL: ts.URL,
215215
FlagSetsFilter: []string{"one", "two"},
216-
FlagsSpecVersion: specs.FLAG_V1_1,
216+
FlagsSpecVersion: specs.FlagSpecs[1],
217217
},
218218
logger,
219219
dtos.Metadata{},
@@ -235,7 +235,7 @@ func TestSpitChangesFetchWithAll(t *testing.T) {
235235
if !queryParams.Has("sets") {
236236
t.Error("Expected to have sets")
237237
}
238-
if queryParams.Get("s") != specs.FLAG_V1_1 {
238+
if queryParams.Get("s") != specs.FlagSpecs[1] {
239239
t.Error("Expected to have spec")
240240
}
241241
asString := queryParams.Get("sets")

service/api/specs/specversion.go

+18-14
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
11
package specs
22

3-
import "fmt"
3+
import (
4+
"fmt"
45

5-
const (
6-
FLAG_V1_0 = "1.0"
7-
FLAG_V1_1 = "1.1"
8-
FLAG_V1_2 = "1.2"
6+
"golang.org/x/exp/slices"
97
)
108

9+
var FlagSpecs = []string{
10+
"1.0", // default
11+
"1.1", // Semver Matcher
12+
"1.2", // Large Segment Matcher
13+
}
14+
15+
var Latest = string(FlagSpecs[len(FlagSpecs)-1])
16+
var Default = string(FlagSpecs[0])
17+
1118
// Match returns the spec version if it is valid, otherwise it returns nil
1219
func Match(version string) *string {
13-
switch version {
14-
case FLAG_V1_0:
15-
return &version
16-
case FLAG_V1_1:
17-
return &version
18-
case FLAG_V1_2:
19-
return &version
20+
ok := slices.Contains(FlagSpecs, version)
21+
if !ok {
22+
return nil
2023
}
21-
return nil
24+
25+
return &version
2226
}
2327

2428
func ParseAndValidate(spec string) (string, error) {
2529
if len(spec) == 0 {
2630
// return default flag spec
27-
return FLAG_V1_0, nil
31+
return Default, nil
2832
}
2933

3034
if Match(spec) == nil {

service/api/specs/splitversionfilter.go

+12-13
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,34 @@ import (
55
)
66

77
type SplitVersionFilter struct {
8-
v1_0 map[string]bool
9-
v1_1 map[string]bool
8+
data map[string]map[string]bool
109
}
1110

1211
func NewSplitVersionFilter() SplitVersionFilter {
13-
v1_1 := map[string]bool{matchers.MatcherTypeInLargeSegment: true}
14-
v1_0 := mergeMaps(map[string]bool{
12+
data := map[string]map[string]bool{
13+
FlagSpecs[1]: {matchers.MatcherTypeInLargeSegment: true},
14+
}
15+
16+
data[Default] = mergeMaps(map[string]bool{
1517
matchers.MatcherEqualToSemver: true,
1618
matchers.MatcherTypeLessThanOrEqualToSemver: true,
1719
matchers.MatcherTypeGreaterThanOrEqualToSemver: true,
1820
matchers.MatcherTypeBetweenSemver: true,
1921
matchers.MatcherTypeInListSemver: true,
20-
}, v1_1)
22+
}, data[FlagSpecs[1]])
2123

2224
return SplitVersionFilter{
23-
v1_0: v1_0,
24-
v1_1: v1_1,
25+
data: data,
2526
}
2627
}
2728

2829
func (f *SplitVersionFilter) ShouldFilter(matcher string, apiVersion string) bool {
29-
switch apiVersion {
30-
case FLAG_V1_1:
31-
return f.v1_1[matcher]
32-
case FLAG_V1_0:
33-
return f.v1_0[matcher]
30+
matchers, ok := f.data[apiVersion]
31+
if !ok {
32+
return false
3433
}
3534

36-
return false
35+
return matchers[matcher]
3736
}
3837

3938
func mergeMaps(versionMap map[string]bool, toMergeMap map[string]bool) map[string]bool {

service/api/specs/splitversionfilter_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ import (
88

99
func TestParseAndValidate(t *testing.T) {
1010
res, err := ParseAndValidate("")
11-
if err != nil || res != FLAG_V1_0 {
11+
if err != nil || res != Default {
1212
t.Error("It should be 1.1")
1313
}
1414

1515
res, err = ParseAndValidate("1.1")
16-
if err != nil || res != FLAG_V1_1 {
16+
if err != nil || res != FlagSpecs[1] {
1717
t.Error("It should be 1.1")
1818
}
1919

2020
res, err = ParseAndValidate("1.2")
21-
if err != nil || res != FLAG_V1_2 {
21+
if err != nil || res != FlagSpecs[2] {
2222
t.Error("It should be 1.2")
2323
}
2424

@@ -28,34 +28,34 @@ func TestParseAndValidate(t *testing.T) {
2828
}
2929
}
3030

31-
func TestsplitVersionFilter(t *testing.T) {
31+
func TestSplitVersionFilter(t *testing.T) {
3232
filter := NewSplitVersionFilter()
33-
shouldFilter := filter.ShouldFilter(matchers.MatcherTypeBetweenSemver, FLAG_V1_0)
33+
shouldFilter := filter.ShouldFilter(matchers.MatcherTypeBetweenSemver, Default)
3434
if !shouldFilter {
3535
t.Error("It should filtered")
3636
}
3737

38-
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeEqualTo, FLAG_V1_0)
38+
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeEqualTo, Default)
3939
if shouldFilter {
4040
t.Error("It should not filtered")
4141
}
4242

43-
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeBetweenSemver, FLAG_V1_1)
43+
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeBetweenSemver, FlagSpecs[1])
4444
if shouldFilter {
4545
t.Error("It should not filtered")
4646
}
4747

48-
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeInLargeSegment, FLAG_V1_0)
48+
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeInLargeSegment, Default)
4949
if !shouldFilter {
5050
t.Error("It should filtered")
5151
}
5252

53-
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeInLargeSegment, FLAG_V1_1)
53+
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeInLargeSegment, FlagSpecs[1])
5454
if !shouldFilter {
5555
t.Error("It should filtered")
5656
}
5757

58-
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeInLargeSegment, FLAG_V1_2)
58+
shouldFilter = filter.ShouldFilter(matchers.MatcherTypeInLargeSegment, FlagSpecs[2])
5959
if shouldFilter {
6060
t.Error("It should not filtered")
6161
}

service/commons_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
)
1010

1111
func TestSplitFetchOptions(t *testing.T) {
12-
fetchOptions := MakeFlagRequestParams().WithChangeNumber(123456).WithFlagSetsFilter("filter").WithTill(*common.Int64Ref(123)).WithSpecVersion(common.StringRef(specs.FLAG_V1_1))
12+
fetchOptions := MakeFlagRequestParams().WithChangeNumber(123456).WithFlagSetsFilter("filter").WithTill(*common.Int64Ref(123)).WithSpecVersion(common.StringRef(specs.FlagSpecs[1]))
1313
req, _ := http.NewRequest("GET", "test", nil)
1414
fetchOptions.Apply(req)
1515

@@ -19,7 +19,7 @@ func TestSplitFetchOptions(t *testing.T) {
1919
if req.URL.Query().Get(since) != "123456" {
2020
t.Error("Change number not set")
2121
}
22-
if req.URL.Query().Get(spec) != specs.FLAG_V1_1 {
22+
if req.URL.Query().Get(spec) != specs.FlagSpecs[1] {
2323
t.Error("Spec version not set")
2424
}
2525
if req.URL.Query().Get(sets) != "filter" {
@@ -55,14 +55,14 @@ func TestSegmentRequestParams(t *testing.T) {
5555
}
5656

5757
func TestAuthRequestParams(t *testing.T) {
58-
fetchOptions := MakeAuthRequestParams(common.StringRef(specs.FLAG_V1_1))
58+
fetchOptions := MakeAuthRequestParams(common.StringRef(specs.FlagSpecs[1]))
5959
req, _ := http.NewRequest("GET", "test", nil)
6060
fetchOptions.Apply(req)
6161

6262
if req.Header.Get(cacheControl) != cacheControlNoCache {
6363
t.Error("Cache control header not set")
6464
}
65-
if req.URL.Query().Get(spec) != specs.FLAG_V1_1 {
65+
if req.URL.Query().Get(spec) != specs.FlagSpecs[1] {
6666
t.Error("Spec version not set")
6767
}
6868
if req.URL.String() != "test?s=1.1" {

0 commit comments

Comments
 (0)