Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SDK semver matchers filter #91

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
5.5.0 (Apr 26, 2024)
- Added split version filter to be used on semver matchers logic.

5.4.0 (Jan 10, 2024)
- Added `Scan` operation to Redis

Expand Down
48 changes: 48 additions & 0 deletions sdk/specs/matchers/matchers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package matchers

const (
// MatcherTypeAllKeys string value
MatcherTypeAllKeys = "ALL_KEYS"
// MatcherTypeInSegment string value
MatcherTypeInSegment = "IN_SEGMENT"
// MatcherTypeWhitelist string value
MatcherTypeWhitelist = "WHITELIST"
// MatcherTypeEqualTo string value
MatcherTypeEqualTo = "EQUAL_TO"
// MatcherTypeGreaterThanOrEqualTo string value
MatcherTypeGreaterThanOrEqualTo = "GREATER_THAN_OR_EQUAL_TO"
// MatcherTypeLessThanOrEqualTo string value
MatcherTypeLessThanOrEqualTo = "LESS_THAN_OR_EQUAL_TO"
// MatcherTypeBetween string value
MatcherTypeBetween = "BETWEEN"
// MatcherTypeEqualToSet string value
MatcherTypeEqualToSet = "EQUAL_TO_SET"
// MatcherTypePartOfSet string value
MatcherTypePartOfSet = "PART_OF_SET"
// MatcherTypeContainsAllOfSet string value
MatcherTypeContainsAllOfSet = "CONTAINS_ALL_OF_SET"
// MatcherTypeContainsAnyOfSet string value
MatcherTypeContainsAnyOfSet = "CONTAINS_ANY_OF_SET"
// MatcherTypeStartsWith string value
MatcherTypeStartsWith = "STARTS_WITH"
// MatcherTypeEndsWith string value
MatcherTypeEndsWith = "ENDS_WITH"
// MatcherTypeContainsString string value
MatcherTypeContainsString = "CONTAINS_STRING"
// MatcherTypeInSplitTreatment string value
MatcherTypeInSplitTreatment = "IN_SPLIT_TREATMENT"
// MatcherTypeEqualToBoolean string value
MatcherTypeEqualToBoolean = "EQUAL_TO_BOOLEAN"
// MatcherTypeMatchesString string value
MatcherTypeMatchesString = "MATCHES_STRING"
// MatcherEqualToSemver string value
MatcherEqualToSemver = "EQUAL_TO_SEMVER"
// MatcherTypeGreaterThanOrEqualToSemver string value
MatcherTypeGreaterThanOrEqualToSemver = "GREATER_THAN_OR_EQUAL_TO_SEMVER"
// MatcherTypeLessThanOrEqualToSemver string value
MatcherTypeLessThanOrEqualToSemver = "LESS_THAN_OR_EQUAL_TO_SEMVER"
// MatcherTypeBetweenSemver string value
MatcherTypeBetweenSemver = "BETWEEN_SEMVER"
// MatcherTypeInListSemver string value
MatcherTypeInListSemver = "IN_LIST_SEMVER"
)
36 changes: 36 additions & 0 deletions sdk/specs/splitversionfilter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package specs

import (
"github.com/splitio/go-toolkit/v5/sdk/specs/matchers"
)

type SplitVersionFilter struct {
excluded map[string]*map[string]struct{}
}

func NewSplitVersionFilter() SplitVersionFilter {
matchersToExclude := map[string]*map[string]struct{}{
"1.0": {
matchers.MatcherEqualToSemver: {},
matchers.MatcherTypeLessThanOrEqualToSemver: {},
matchers.MatcherTypeGreaterThanOrEqualToSemver: {},
matchers.MatcherTypeBetweenSemver: {},
matchers.MatcherTypeInListSemver: {},
},
"1.1": {},
}
return SplitVersionFilter{
excluded: matchersToExclude,
}
}

func (s *SplitVersionFilter) ShouldFilter(matcher string, apiVersion string) bool {
forVersion, ok := s.excluded[apiVersion]
if !ok {
return false
}
if _, ok := (*forVersion)[matcher]; ok {
return true
}
return false
}
24 changes: 24 additions & 0 deletions sdk/specs/splitversionfilter_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package specs

import (
"github.com/splitio/go-toolkit/v5/sdk/specs/matchers"
"testing"
)

func Test_splitVersionFilter_shouldFilter(t *testing.T) {
filter := NewSplitVersionFilter()
shouldFilter := filter.ShouldFilter(matchers.MatcherTypeBetweenSemver, "1.0")
if !shouldFilter {
t.Error("It should filtered")
}

shouldFilter = filter.ShouldFilter(matchers.MatcherTypeEqualTo, "1.0")
if shouldFilter {
t.Error("It should not filtered")
}

shouldFilter = filter.ShouldFilter(matchers.MatcherTypeBetweenSemver, "1.1")
if shouldFilter {
t.Error("It should not filtered")
}
}
Loading