Skip to content

Commit f68827b

Browse files
author
Bilal Al
committed
added less than or equal semver matcher
1 parent ab2fb7f commit f68827b

File tree

8 files changed

+113
-31
lines changed

8 files changed

+113
-31
lines changed

client/src/main/java/io/split/client/dtos/MatcherType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,6 @@ public enum MatcherType {
3434

3535
/* Semver matchers */
3636
EQUAL_TO_SEMVER,
37-
GREATER_THAN_OR_EQUAL_TO_SEMVER
37+
GREATER_THAN_OR_EQUAL_TO_SEMVER,
38+
LESS_THAN_OR_EQUAL_TO_SEMVER
3839
}

client/src/main/java/io/split/engine/experiments/SplitParser.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import io.split.engine.matchers.GreaterThanOrEqualToMatcher;
2020
import io.split.engine.matchers.LessThanOrEqualToMatcher;
2121
import io.split.engine.matchers.UserDefinedSegmentMatcher;
22-
import io.split.engine.matchers.EqualToMatcherSemver;
22+
import io.split.engine.matchers.EqualToSemverMatcher;
2323
import io.split.engine.matchers.collections.ContainsAllOfSetMatcher;
2424
import io.split.engine.matchers.collections.ContainsAnyOfSetMatcher;
2525
import io.split.engine.matchers.collections.EqualToSetMatcher;
@@ -30,6 +30,7 @@
3030
import io.split.engine.matchers.strings.StartsWithAnyOfMatcher;
3131
import io.split.engine.matchers.strings.WhitelistMatcher;
3232
import io.split.engine.matchers.GreaterThanOrEqualToSemverMatcher;
33+
import io.split.engine.matchers.LessThanOrEqualToSemverMatcher;
3334

3435
import org.slf4j.Logger;
3536
import org.slf4j.LoggerFactory;
@@ -198,12 +199,16 @@ private AttributeMatcher toMatcher(Matcher matcher) {
198199
break;
199200
case EQUAL_TO_SEMVER:
200201
checkNotNull(matcher.stringMatcherData);
201-
delegate = new EqualToMatcherSemver(matcher.stringMatcherData);
202+
delegate = new EqualToSemverMatcher(matcher.stringMatcherData);
202203
break;
203204
case GREATER_THAN_OR_EQUAL_TO_SEMVER:
204205
checkNotNull(matcher.stringMatcherData);
205206
delegate = new GreaterThanOrEqualToSemverMatcher(matcher.stringMatcherData);
206207
break;
208+
case LESS_THAN_OR_EQUAL_TO_SEMVER:
209+
checkNotNull(matcher.stringMatcherData);
210+
delegate = new LessThanOrEqualToSemverMatcher(matcher.stringMatcherData);
211+
break;
207212
default:
208213
throw new IllegalArgumentException("Unknown matcher type: " + matcher.matcherType);
209214
}

client/src/main/java/io/split/engine/matchers/EqualToMatcherSemver.java renamed to client/src/main/java/io/split/engine/matchers/EqualToSemverMatcher.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
import java.util.Map;
66

7-
public class EqualToMatcherSemver implements Matcher {
7+
public class EqualToSemverMatcher implements Matcher {
88

99
private final Semver _semVer;
1010

11-
public EqualToMatcherSemver(String semVer) {
11+
public EqualToSemverMatcher(String semVer) {
1212
_semVer = Semver.build(semVer);
1313
}
1414

@@ -44,9 +44,9 @@ public int hashCode() {
4444
public boolean equals(Object obj) {
4545
if (obj == null) return false;
4646
if (this == obj) return true;
47-
if (!(obj instanceof EqualToMatcherSemver)) return false;
47+
if (!(obj instanceof EqualToSemverMatcher)) return false;
4848

49-
EqualToMatcherSemver other = (EqualToMatcherSemver) obj;
49+
EqualToSemverMatcher other = (EqualToSemverMatcher) obj;
5050

5151
return _semVer == other._semVer;
5252
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package io.split.engine.matchers;
2+
3+
import io.split.engine.evaluator.EvaluationContext;
4+
5+
import java.util.Map;
6+
7+
public class LessThanOrEqualToSemverMatcher implements Matcher {
8+
9+
private final Semver _semVer;
10+
11+
public LessThanOrEqualToSemverMatcher(String semVer) {
12+
_semVer = Semver.build(semVer);
13+
}
14+
15+
@Override
16+
public boolean match(Object matchValue, String bucketingKey, Map<String, Object> attributes, EvaluationContext evaluationContext) {
17+
if (matchValue == null) {
18+
return false;
19+
}
20+
Semver matchSemver = Semver.build(matchValue.toString());
21+
if (matchSemver == null) {
22+
return false;
23+
}
24+
25+
return _semVer != null && matchSemver.Compare(_semVer) <= 0;
26+
}
27+
28+
@Override
29+
public String toString() {
30+
StringBuilder bldr = new StringBuilder();
31+
bldr.append("== ");
32+
bldr.append(_semVer);
33+
return bldr.toString();
34+
}
35+
36+
@Override
37+
public int hashCode() {
38+
int result = 17;
39+
result = 31 * result + _semVer.hashCode();
40+
return result;
41+
}
42+
43+
@Override
44+
public boolean equals(Object obj) {
45+
if (obj == null) return false;
46+
if (this == obj) return true;
47+
if (!(obj instanceof LessThanOrEqualToSemverMatcher)) return false;
48+
49+
LessThanOrEqualToSemverMatcher other = (LessThanOrEqualToSemverMatcher) obj;
50+
51+
return _semVer == other._semVer;
52+
}
53+
54+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.split.engine.matchers;
2+
3+
import org.junit.Test;
4+
5+
import static org.junit.Assert.assertTrue;
6+
7+
/**
8+
* Tests for EqualToSemverMatcher
9+
*/
10+
11+
public class EqualToSemverMatcherTest {
12+
13+
@Test
14+
public void works() {
15+
EqualToSemverMatcher equalToSemverMatcher = new EqualToSemverMatcher("2.1.8");
16+
17+
assertTrue( equalToSemverMatcher.match("2.1.8", null, null, null) == true);
18+
assertTrue( equalToSemverMatcher.match("2.1.9", null, null, null) == false);
19+
assertTrue( equalToSemverMatcher.match("2.1.8-rc", null, null, null) == false);
20+
assertTrue( equalToSemverMatcher.match("2.1.8+build", null, null, null) == false);
21+
}
22+
}

client/src/test/java/io/split/engine/matchers/EqualToSemverTest.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

client/src/test/java/io/split/engine/matchers/GreaterThanOrEqualToSemverTest.java renamed to client/src/test/java/io/split/engine/matchers/GreaterThanOrEqualToSemverMatcherTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Tests for EqualToSemverMatcher
99
*/
1010

11-
public class GreaterThanOrEqualToSemverTest {
11+
public class GreaterThanOrEqualToSemverMatcherTest {
1212

1313
@Test
1414
public void works() {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.split.engine.matchers;
2+
3+
import org.junit.Test;
4+
5+
import static org.junit.Assert.assertTrue;
6+
7+
/**
8+
* Tests for EqualToSemverMatcher
9+
*/
10+
11+
public class LessThanOrEqualToSemverMatcherTest {
12+
13+
@Test
14+
public void works() {
15+
LessThanOrEqualToSemverMatcher lessThanOrEqualToSemverMatcher = new LessThanOrEqualToSemverMatcher("2.1.8");
16+
17+
assertTrue( lessThanOrEqualToSemverMatcher.match("2.1.8", null, null, null) == true);
18+
assertTrue( lessThanOrEqualToSemverMatcher.match("2.1.9", null, null, null) == false);
19+
assertTrue( lessThanOrEqualToSemverMatcher.match("2.1.8-rc", null, null, null) == true);
20+
assertTrue( lessThanOrEqualToSemverMatcher.match("2.0.10", null, null, null) == true);
21+
assertTrue( lessThanOrEqualToSemverMatcher.match("2.1.8+build", null, null, null) == true);
22+
}
23+
}

0 commit comments

Comments
 (0)