Skip to content

Commit 11be296

Browse files
author
Mike Davis
committed
Refactor semver.
1 parent 1bdcc2c commit 11be296

File tree

9 files changed

+44
-83
lines changed

9 files changed

+44
-83
lines changed

core-api/src/main/java/com/optimizely/ab/config/audience/match/GEMatch.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,13 @@
2020

2121
import static com.optimizely.ab.internal.AttributesUtil.isValidNumber;
2222

23-
class GEMatch extends AttributeMatch<Number> {
24-
Number value;
25-
26-
protected GEMatch(Number value) {
27-
this.value = value;
28-
}
23+
class GEMatch implements Match {
2924

3025
@Nullable
31-
public Boolean eval(Object attributeValue) {
26+
public Boolean eval(Object conditionValue, Object attributeValue) {
3227
try {
33-
if(isValidNumber(attributeValue)) {
34-
return castToValueType(attributeValue, value).doubleValue() >= value.doubleValue();
28+
if(isValidNumber(attributeValue) && isValidNumber(conditionValue) ) {
29+
return ((Number) attributeValue).doubleValue() >= ((Number) conditionValue).doubleValue();
3530
}
3631
} catch (Exception e) {
3732
return null;

core-api/src/main/java/com/optimizely/ab/config/audience/match/LEMatch.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,19 @@
2020

2121
import static com.optimizely.ab.internal.AttributesUtil.isValidNumber;
2222

23-
class LEMatch extends AttributeMatch<Number> {
24-
Number value;
25-
26-
protected LEMatch(Number value) {
27-
this.value = value;
28-
}
23+
class LEMatch implements Match {
2924

3025
@Nullable
31-
public Boolean eval(Object attributeValue) {
26+
public Boolean eval(Object conditionValue, Object attributeValue) {
3227
try {
33-
if(isValidNumber(attributeValue)) {
34-
return castToValueType(attributeValue, value).doubleValue() <= value.doubleValue();
28+
if(isValidNumber(attributeValue) && isValidNumber(conditionValue) ) {
29+
return ((Number) attributeValue).doubleValue() <= ((Number) conditionValue).doubleValue();
3530
}
3631
} catch (Exception e) {
3732
return null;
3833
}
3934
return null;
35+
4036
}
4137
}
4238

core-api/src/main/java/com/optimizely/ab/config/audience/match/MatchRegistry.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,30 @@ public class MatchRegistry {
3232
public static final String EXACT = "exact";
3333
public static final String GREATER_THAN = "gt";
3434
public static final String LESS_THAN = "lt";
35+
public static final String LESS_THAN_EQ = "le";
36+
public static final String GREATER_THAN_EQ = "ge";
3537
public static final String SUBSTRING = "substring";
38+
public static final String SEMVER_EQ = "semver_eq";
39+
public static final String SEMVER_GE = "semver_ge";
40+
public static final String SEMVER_GT = "semver_gt";
41+
public static final String SEMVER_LE = "semver_le";
42+
public static final String SEMVER_LT = "semver_lt";
43+
3644
public static final String LEGACY = "legacy";
3745

3846
static {
3947
register(EXISTS, new ExistsMatch());
4048
register(EXACT, new ExactMatch());
4149
register(GREATER_THAN, new GTMatch());
4250
register(LESS_THAN, new LTMatch());
51+
register(LESS_THAN_EQ, new LEMatch());
52+
register(GREATER_THAN_EQ, new GEMatch());
4353
register(SUBSTRING, new SubstringMatch());
54+
register(SEMVER_EQ, new SemanticVersionEqualsMatch());
55+
register(SEMVER_GE, new SemanticVersionGEMatch());
56+
register(SEMVER_GT, new SemanticVersionGTMatch());
57+
register(SEMVER_LE, new SemanticVersionLEMatch());
58+
register(SEMVER_LT, new SemanticVersionLTMatch());
4459
register(LEGACY, new DefaultMatchForLegacyAttributes());
4560
}
4661

core-api/src/main/java/com/optimizely/ab/config/audience/match/SemanticVersion.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ public SemanticVersion(String version) {
3434
this.version = version;
3535
}
3636

37+
public static int compare(Object o1, Object o2) throws Exception {
38+
if (o1 instanceof String && o2 instanceof String) {
39+
SemanticVersion v1 = new SemanticVersion((String) o1);
40+
SemanticVersion v2 = new SemanticVersion((String) o2);
41+
return v1.compare(v2);
42+
}
43+
44+
throw new UnexpectedValueTypeException();
45+
}
46+
3747
public int compare(SemanticVersion targetedVersion) throws Exception {
3848

3949
if (targetedVersion == null || stringIsNullOrEmpty(targetedVersion.version)) {

core-api/src/main/java/com/optimizely/ab/config/audience/match/SemanticVersionEqualsMatch.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,12 @@
1919
import javax.annotation.Nullable;
2020

2121
class SemanticVersionEqualsMatch implements Match {
22-
String value;
23-
24-
protected SemanticVersionEqualsMatch(String value) {
25-
this.value = value;
26-
}
27-
2822
@Nullable
29-
public Boolean eval(Object attributeValue) {
23+
public Boolean eval(Object conditionValue, Object attributeValue) {
3024
try {
31-
if (this.value != null && attributeValue instanceof String) {
32-
SemanticVersion conditionalVersion = new SemanticVersion(value);
33-
SemanticVersion userSemanticVersion = new SemanticVersion((String) attributeValue);
34-
return userSemanticVersion.compare(conditionalVersion) == 0;
35-
}
25+
return SemanticVersion.compare(attributeValue, conditionValue) == 0;
3626
} catch (Exception e) {
3727
return null;
3828
}
39-
return null;
4029
}
4130
}

core-api/src/main/java/com/optimizely/ab/config/audience/match/SemanticVersionGEMatch.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,12 @@
1919
import javax.annotation.Nullable;
2020

2121
class SemanticVersionGEMatch implements Match {
22-
String value;
23-
24-
protected SemanticVersionGEMatch(String value) {
25-
this.value = value;
26-
}
27-
2822
@Nullable
29-
public Boolean eval(Object attributeValue) {
23+
public Boolean eval(Object conditionValue, Object attributeValue) {
3024
try {
31-
if (this.value != null && attributeValue instanceof String) {
32-
SemanticVersion conditionalVersion = new SemanticVersion(value);
33-
SemanticVersion userSemanticVersion = new SemanticVersion((String) attributeValue);
34-
return userSemanticVersion.compare(conditionalVersion) >= 0;
35-
}
25+
return SemanticVersion.compare(attributeValue, conditionValue) >= 0;
3626
} catch (Exception e) {
3727
return null;
3828
}
39-
return null;
4029
}
4130
}

core-api/src/main/java/com/optimizely/ab/config/audience/match/SemanticVersionGTMatch.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,12 @@
1919
import javax.annotation.Nullable;
2020

2121
class SemanticVersionGTMatch implements Match {
22-
String value;
23-
24-
protected SemanticVersionGTMatch(String target) {
25-
this.value = target;
26-
}
27-
2822
@Nullable
29-
public Boolean eval(Object attributeValue) {
23+
public Boolean eval(Object conditionValue, Object attributeValue) {
3024
try {
31-
if (this.value != null && attributeValue instanceof String) {
32-
SemanticVersion conditionalVersion = new SemanticVersion(value);
33-
SemanticVersion userSemanticVersion = new SemanticVersion((String) attributeValue);
34-
return userSemanticVersion.compare(conditionalVersion) > 0;
35-
}
25+
return SemanticVersion.compare(attributeValue, conditionValue) > 0;
3626
} catch (Exception e) {
3727
return null;
3828
}
39-
return null;
4029
}
4130
}

core-api/src/main/java/com/optimizely/ab/config/audience/match/SemanticVersionLEMatch.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,12 @@
1919
import javax.annotation.Nullable;
2020

2121
class SemanticVersionLEMatch implements Match {
22-
String value;
23-
24-
protected SemanticVersionLEMatch(String target) {
25-
this.value = target;
26-
}
27-
2822
@Nullable
29-
public Boolean eval(Object attributeValue) {
23+
public Boolean eval(Object conditionValue, Object attributeValue) {
3024
try {
31-
if (this.value != null && attributeValue instanceof String) {
32-
SemanticVersion conditionalVersion = new SemanticVersion(value);
33-
SemanticVersion userSemanticVersion = new SemanticVersion((String) attributeValue);
34-
return userSemanticVersion.compare(conditionalVersion) <= 0;
35-
}
25+
return SemanticVersion.compare(attributeValue, conditionValue) <= 0;
3626
} catch (Exception e) {
3727
return null;
3828
}
39-
return null;
4029
}
4130
}

core-api/src/main/java/com/optimizely/ab/config/audience/match/SemanticVersionLTMatch.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,12 @@
1919
import javax.annotation.Nullable;
2020

2121
class SemanticVersionLTMatch implements Match {
22-
String value;
23-
24-
protected SemanticVersionLTMatch(String target) {
25-
this.value = target;
26-
}
27-
2822
@Nullable
29-
public Boolean eval(Object attributeValue) {
23+
public Boolean eval(Object conditionValue, Object attributeValue) {
3024
try {
31-
if (this.value != null && attributeValue instanceof String) {
32-
SemanticVersion conditionalVersion = new SemanticVersion(value);
33-
SemanticVersion userSemanticVersion = new SemanticVersion((String) attributeValue);
34-
return userSemanticVersion.compare(conditionalVersion) < 0;
35-
}
25+
return SemanticVersion.compare(attributeValue, conditionValue) < 0;
3626
} catch (Exception e) {
3727
return null;
3828
}
39-
return null;
4029
}
4130
}

0 commit comments

Comments
 (0)