From 4b12f7f473122286b974d0017b866015548c2d0b Mon Sep 17 00:00:00 2001 From: Bilal Al Date: Fri, 26 Apr 2024 10:26:44 -0700 Subject: [PATCH 1/5] added equalto semver matcher --- .../io/split/client/dtos/MatcherType.java | 5 +- .../split/engine/experiments/SplitParser.java | 15 ++--- .../engine/matchers/EqualToMatcherSemver.java | 57 +++++++++++++++++++ .../engine/matchers/EqualToSemverTest.java | 23 ++++++++ 4 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java create mode 100644 client/src/test/java/io/split/engine/matchers/EqualToSemverTest.java diff --git a/client/src/main/java/io/split/client/dtos/MatcherType.java b/client/src/main/java/io/split/client/dtos/MatcherType.java index ec22baec7..1e93cb07c 100644 --- a/client/src/main/java/io/split/client/dtos/MatcherType.java +++ b/client/src/main/java/io/split/client/dtos/MatcherType.java @@ -30,5 +30,8 @@ public enum MatcherType { EQUAL_TO_BOOLEAN, /* Dependency Matcher */ - IN_SPLIT_TREATMENT + IN_SPLIT_TREATMENT, + + /* Semver matchers */ + EQUAL_TO_SEMVER } diff --git a/client/src/main/java/io/split/engine/experiments/SplitParser.java b/client/src/main/java/io/split/engine/experiments/SplitParser.java index da4f0edcc..a46277c46 100644 --- a/client/src/main/java/io/split/engine/experiments/SplitParser.java +++ b/client/src/main/java/io/split/engine/experiments/SplitParser.java @@ -9,16 +9,7 @@ import io.split.client.dtos.ConditionType; import io.split.client.dtos.MatcherType; import io.split.engine.evaluator.Labels; -import io.split.engine.matchers.AllKeysMatcher; -import io.split.engine.matchers.AttributeMatcher; -import io.split.engine.matchers.BetweenMatcher; -import io.split.engine.matchers.BooleanMatcher; -import io.split.engine.matchers.CombiningMatcher; -import io.split.engine.matchers.DependencyMatcher; -import io.split.engine.matchers.EqualToMatcher; -import io.split.engine.matchers.GreaterThanOrEqualToMatcher; -import io.split.engine.matchers.LessThanOrEqualToMatcher; -import io.split.engine.matchers.UserDefinedSegmentMatcher; +import io.split.engine.matchers.*; import io.split.engine.matchers.collections.ContainsAllOfSetMatcher; import io.split.engine.matchers.collections.ContainsAnyOfSetMatcher; import io.split.engine.matchers.collections.EqualToSetMatcher; @@ -193,6 +184,10 @@ private AttributeMatcher toMatcher(Matcher matcher) { + ". matcher.booleanMatcherData() MUST NOT BE null"); delegate = new BooleanMatcher(matcher.booleanMatcherData); break; + case EQUAL_TO_SEMVER: + checkNotNull(matcher.stringMatcherData); + delegate = new EqualToMatcherSemver(matcher.stringMatcherData); + break; default: throw new IllegalArgumentException("Unknown matcher type: " + matcher.matcherType); } diff --git a/client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java b/client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java new file mode 100644 index 000000000..d2f249bea --- /dev/null +++ b/client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java @@ -0,0 +1,57 @@ +package io.split.engine.matchers; + +import io.split.engine.evaluator.EvaluationContext; + +import java.util.Map; + +/** + * Created by adilaijaz on 3/7/16. + */ +public class EqualToMatcherSemver implements Matcher { + + private final Semver _semVer; + + public EqualToMatcherSemver(String dataType) { + _semVer = Semver.build(dataType.toString()); + } + + @Override + public boolean match(Object matchValue, String bucketingKey, Map attributes, EvaluationContext evaluationContext) { + if (matchValue == null) { + return false; + } + Semver matchSemver = Semver.build(matchValue.toString()); + if (matchSemver == null) { + return false; + } + + return _semVer != null && matchSemver.Version().equals(_semVer.Version()); + } + + @Override + public String toString() { + StringBuilder bldr = new StringBuilder(); + bldr.append("== "); + bldr.append(_semVer); + return bldr.toString(); + } + + @Override + public int hashCode() { + int result = 17; + result = 31 * result + _semVer.hashCode(); + return result; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) return false; + if (this == obj) return true; + if (!(obj instanceof EqualToMatcherSemver)) return false; + + EqualToMatcherSemver other = (EqualToMatcherSemver) obj; + + return _semVer == other._semVer; + } + +} diff --git a/client/src/test/java/io/split/engine/matchers/EqualToSemverTest.java b/client/src/test/java/io/split/engine/matchers/EqualToSemverTest.java new file mode 100644 index 000000000..d04b1c911 --- /dev/null +++ b/client/src/test/java/io/split/engine/matchers/EqualToSemverTest.java @@ -0,0 +1,23 @@ +package io.split.engine.matchers; + +import io.split.engine.matchers.EqualToMatcherSemver; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +/** + * Tests for EqualToSemverMatcher + */ + +public class EqualToSemverTest { + + @Test + public void works() { + EqualToMatcherSemver equalToMatcherSemver = new EqualToMatcherSemver("2.1.8"); + + assertTrue( equalToMatcherSemver.match("2.1.8", null, null, null) == true); + assertTrue( equalToMatcherSemver.match("2.1.9", null, null, null) == false); + assertTrue( equalToMatcherSemver.match("2.1.8-rc", null, null, null) == false); + assertTrue( equalToMatcherSemver.match("2.1.8+build", null, null, null) == false); + } +} From ac565aa5d18e10512bee98db51a441c6259e0a66 Mon Sep 17 00:00:00 2001 From: Bilal Al Date: Fri, 26 Apr 2024 10:35:35 -0700 Subject: [PATCH 2/5] polish --- .../io/split/engine/experiments/SplitParser.java | 12 +++++++++++- .../split/engine/matchers/EqualToMatcherSemver.java | 7 ++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/client/src/main/java/io/split/engine/experiments/SplitParser.java b/client/src/main/java/io/split/engine/experiments/SplitParser.java index a46277c46..bf11c8e92 100644 --- a/client/src/main/java/io/split/engine/experiments/SplitParser.java +++ b/client/src/main/java/io/split/engine/experiments/SplitParser.java @@ -9,7 +9,17 @@ import io.split.client.dtos.ConditionType; import io.split.client.dtos.MatcherType; import io.split.engine.evaluator.Labels; -import io.split.engine.matchers.*; +import io.split.engine.matchers.AllKeysMatcher; +import io.split.engine.matchers.AttributeMatcher; +import io.split.engine.matchers.BetweenMatcher; +import io.split.engine.matchers.BooleanMatcher; +import io.split.engine.matchers.CombiningMatcher; +import io.split.engine.matchers.DependencyMatcher; +import io.split.engine.matchers.EqualToMatcher; +import io.split.engine.matchers.GreaterThanOrEqualToMatcher; +import io.split.engine.matchers.LessThanOrEqualToMatcher; +import io.split.engine.matchers.UserDefinedSegmentMatcher; +import io.split.engine.matchers.EqualToMatcherSemver; import io.split.engine.matchers.collections.ContainsAllOfSetMatcher; import io.split.engine.matchers.collections.ContainsAnyOfSetMatcher; import io.split.engine.matchers.collections.EqualToSetMatcher; diff --git a/client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java b/client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java index d2f249bea..918e6f244 100644 --- a/client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java +++ b/client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java @@ -4,15 +4,12 @@ import java.util.Map; -/** - * Created by adilaijaz on 3/7/16. - */ public class EqualToMatcherSemver implements Matcher { private final Semver _semVer; - public EqualToMatcherSemver(String dataType) { - _semVer = Semver.build(dataType.toString()); + public EqualToMatcherSemver(String semVer) { + _semVer = Semver.build(semVer); } @Override From d06e38e5095c041f94cddb2be89c9b96d9582b95 Mon Sep 17 00:00:00 2001 From: Bilal Al Date: Fri, 26 Apr 2024 11:29:26 -0700 Subject: [PATCH 3/5] polish --- .../split/engine/experiments/SplitParser.java | 4 ++-- ...rSemver.java => EqualToSemverMatcher.java} | 8 +++---- .../matchers/EqualToSemverMatcherTest.java | 22 ++++++++++++++++++ .../engine/matchers/EqualToSemverTest.java | 23 ------------------- 4 files changed, 28 insertions(+), 29 deletions(-) rename client/src/main/java/io/split/engine/matchers/{EqualToMatcherSemver.java => EqualToSemverMatcher.java} (83%) create mode 100644 client/src/test/java/io/split/engine/matchers/EqualToSemverMatcherTest.java delete mode 100644 client/src/test/java/io/split/engine/matchers/EqualToSemverTest.java diff --git a/client/src/main/java/io/split/engine/experiments/SplitParser.java b/client/src/main/java/io/split/engine/experiments/SplitParser.java index bf11c8e92..25e6605a0 100644 --- a/client/src/main/java/io/split/engine/experiments/SplitParser.java +++ b/client/src/main/java/io/split/engine/experiments/SplitParser.java @@ -19,7 +19,7 @@ import io.split.engine.matchers.GreaterThanOrEqualToMatcher; import io.split.engine.matchers.LessThanOrEqualToMatcher; import io.split.engine.matchers.UserDefinedSegmentMatcher; -import io.split.engine.matchers.EqualToMatcherSemver; +import io.split.engine.matchers.EqualToSemverMatcher; import io.split.engine.matchers.collections.ContainsAllOfSetMatcher; import io.split.engine.matchers.collections.ContainsAnyOfSetMatcher; import io.split.engine.matchers.collections.EqualToSetMatcher; @@ -196,7 +196,7 @@ private AttributeMatcher toMatcher(Matcher matcher) { break; case EQUAL_TO_SEMVER: checkNotNull(matcher.stringMatcherData); - delegate = new EqualToMatcherSemver(matcher.stringMatcherData); + delegate = new EqualToSemverMatcher(matcher.stringMatcherData); break; default: throw new IllegalArgumentException("Unknown matcher type: " + matcher.matcherType); diff --git a/client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java b/client/src/main/java/io/split/engine/matchers/EqualToSemverMatcher.java similarity index 83% rename from client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java rename to client/src/main/java/io/split/engine/matchers/EqualToSemverMatcher.java index 918e6f244..7e652c6e1 100644 --- a/client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java +++ b/client/src/main/java/io/split/engine/matchers/EqualToSemverMatcher.java @@ -4,11 +4,11 @@ import java.util.Map; -public class EqualToMatcherSemver implements Matcher { +public class EqualToSemverMatcher implements Matcher { private final Semver _semVer; - public EqualToMatcherSemver(String semVer) { + public EqualToSemverMatcher(String semVer) { _semVer = Semver.build(semVer); } @@ -44,9 +44,9 @@ public int hashCode() { public boolean equals(Object obj) { if (obj == null) return false; if (this == obj) return true; - if (!(obj instanceof EqualToMatcherSemver)) return false; + if (!(obj instanceof EqualToSemverMatcher)) return false; - EqualToMatcherSemver other = (EqualToMatcherSemver) obj; + EqualToSemverMatcher other = (EqualToSemverMatcher) obj; return _semVer == other._semVer; } diff --git a/client/src/test/java/io/split/engine/matchers/EqualToSemverMatcherTest.java b/client/src/test/java/io/split/engine/matchers/EqualToSemverMatcherTest.java new file mode 100644 index 000000000..06cdd8a8d --- /dev/null +++ b/client/src/test/java/io/split/engine/matchers/EqualToSemverMatcherTest.java @@ -0,0 +1,22 @@ +package io.split.engine.matchers; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +/** + * Tests for EqualToSemverMatcher + */ + +public class EqualToSemverMatcherTest { + + @Test + public void works() { + EqualToSemverMatcher equalToSemverMatcher = new EqualToSemverMatcher("2.1.8"); + + assertTrue( equalToSemverMatcher.match("2.1.8", null, null, null) == true); + assertTrue( equalToSemverMatcher.match("2.1.9", null, null, null) == false); + assertTrue( equalToSemverMatcher.match("2.1.8-rc", null, null, null) == false); + assertTrue( equalToSemverMatcher.match("2.1.8+build", null, null, null) == false); + } +} diff --git a/client/src/test/java/io/split/engine/matchers/EqualToSemverTest.java b/client/src/test/java/io/split/engine/matchers/EqualToSemverTest.java deleted file mode 100644 index d04b1c911..000000000 --- a/client/src/test/java/io/split/engine/matchers/EqualToSemverTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.split.engine.matchers; - -import io.split.engine.matchers.EqualToMatcherSemver; -import org.junit.Test; - -import static org.junit.Assert.assertTrue; - -/** - * Tests for EqualToSemverMatcher - */ - -public class EqualToSemverTest { - - @Test - public void works() { - EqualToMatcherSemver equalToMatcherSemver = new EqualToMatcherSemver("2.1.8"); - - assertTrue( equalToMatcherSemver.match("2.1.8", null, null, null) == true); - assertTrue( equalToMatcherSemver.match("2.1.9", null, null, null) == false); - assertTrue( equalToMatcherSemver.match("2.1.8-rc", null, null, null) == false); - assertTrue( equalToMatcherSemver.match("2.1.8+build", null, null, null) == false); - } -} From f3dbbbc5a6709d5ae32e58e05c04afb6fa117ece Mon Sep 17 00:00:00 2001 From: Bilal Al Date: Thu, 2 May 2024 15:49:45 -0700 Subject: [PATCH 4/5] polish --- .../split/engine/matchers/EqualToSemverMatcherTest.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/client/src/test/java/io/split/engine/matchers/EqualToSemverMatcherTest.java b/client/src/test/java/io/split/engine/matchers/EqualToSemverMatcherTest.java index 06cdd8a8d..28ecd15f6 100644 --- a/client/src/test/java/io/split/engine/matchers/EqualToSemverMatcherTest.java +++ b/client/src/test/java/io/split/engine/matchers/EqualToSemverMatcherTest.java @@ -3,6 +3,7 @@ import org.junit.Test; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; /** * Tests for EqualToSemverMatcher @@ -14,9 +15,9 @@ public class EqualToSemverMatcherTest { public void works() { EqualToSemverMatcher equalToSemverMatcher = new EqualToSemverMatcher("2.1.8"); - assertTrue( equalToSemverMatcher.match("2.1.8", null, null, null) == true); - assertTrue( equalToSemverMatcher.match("2.1.9", null, null, null) == false); - assertTrue( equalToSemverMatcher.match("2.1.8-rc", null, null, null) == false); - assertTrue( equalToSemverMatcher.match("2.1.8+build", null, null, null) == false); + assertTrue( equalToSemverMatcher.match("2.1.8", null, null, null)); + assertFalse(equalToSemverMatcher.match("2.1.9", null, null, null)); + assertFalse(equalToSemverMatcher.match("2.1.8-rc", null, null, null)); + assertFalse( equalToSemverMatcher.match("2.1.8+build", null, null, null)); } } From c62964efd00f8acc000d5f2b93030a842c2e76c9 Mon Sep 17 00:00:00 2001 From: Bilal Al Date: Fri, 3 May 2024 11:42:13 -0700 Subject: [PATCH 5/5] polish --- .../java/io/split/engine/matchers/EqualToSemverMatcher.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/main/java/io/split/engine/matchers/EqualToSemverMatcher.java b/client/src/main/java/io/split/engine/matchers/EqualToSemverMatcher.java index 7e652c6e1..4a5d3216c 100644 --- a/client/src/main/java/io/split/engine/matchers/EqualToSemverMatcher.java +++ b/client/src/main/java/io/split/engine/matchers/EqualToSemverMatcher.java @@ -14,7 +14,7 @@ public EqualToSemverMatcher(String semVer) { @Override public boolean match(Object matchValue, String bucketingKey, Map attributes, EvaluationContext evaluationContext) { - if (matchValue == null) { + if (matchValue == null || _semVer == null) { return false; } Semver matchSemver = Semver.build(matchValue.toString()); @@ -22,7 +22,7 @@ public boolean match(Object matchValue, String bucketingKey, Map return false; } - return _semVer != null && matchSemver.Version().equals(_semVer.Version()); + return matchSemver.Version().equals(_semVer.Version()); } @Override