Skip to content

Commit 9b4e6f5

Browse files
V6 improvements (#45)
* Rename SettingsValue to SettingValue * Hashed Start/Ends with length trim fixed * userAttributeToString Float fix * Added missing exception throw to getKeyAndValue * Prerequisite Flag result type and value checks added. Fix SettingValue type equals * Fix typo * Update version to 9.1.0 * Syntax update in docs * Added extra test cases * Typo fix
1 parent d5b9881 commit 9b4e6f5

20 files changed

+132
-107
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=9.0.1
1+
version=9.1.0

src/main/java/com/configcat/ConfigCatClient.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ public CompletableFuture<Map<String, Object>> getAllValuesAsync(User user) {
191191
for (String key : keys) {
192192
Setting setting = settings.get(key);
193193

194-
SettingsValue evaluated = this.rolloutEvaluator.evaluate(setting, key, getEvaluateUser(user), settings, new EvaluateLogger(this.clientLogLevel)).value;
194+
SettingValue evaluated = this.rolloutEvaluator.evaluate(setting, key, getEvaluateUser(user), settings, new EvaluateLogger(this.clientLogLevel)).value;
195195
Object value = this.parseObject(this.classBySettingType(setting.getType()), evaluated, setting.getType());
196196
result.put(key, value);
197197
}
@@ -528,6 +528,8 @@ private <T> Map.Entry<String, T> getKeyAndValueFromSettingsMap(Class<T> classOfT
528528
return new AbstractMap.SimpleEntry<>(settingKey, (T) this.parseObject(classOfT, percentageRule.getValue(), setting.getType()));
529529
}
530530
}
531+
} else {
532+
throw new UnsupportedOperationException("Targeting rule THEN part is missing or invalid.");
531533
}
532534
}
533535

@@ -546,16 +548,16 @@ private <T> Map.Entry<String, T> getKeyAndValueFromSettingsMap(Class<T> classOfT
546548
}
547549
}
548550

549-
private Object parseObject(Class<?> classOfT, SettingsValue settingsValue, SettingType settingType) {
551+
private Object parseObject(Class<?> classOfT, SettingValue settingValue, SettingType settingType) {
550552
validateReturnType(classOfT);
551-
if ((classOfT == String.class) && settingsValue.getStringValue() != null && SettingType.STRING.equals(settingType)) {
552-
return settingsValue.getStringValue();
553-
} else if ((classOfT == Integer.class || classOfT == int.class) && settingsValue.getIntegerValue() != null && SettingType.INT.equals(settingType)) {
554-
return settingsValue.getIntegerValue();
555-
} else if ((classOfT == Double.class || classOfT == double.class) && settingsValue.getDoubleValue() != null && SettingType.DOUBLE.equals(settingType)) {
556-
return settingsValue.getDoubleValue();
557-
} else if ((classOfT == Boolean.class || classOfT == boolean.class) && settingsValue.getBooleanValue() != null && SettingType.BOOLEAN.equals(settingType)) {
558-
return settingsValue.getBooleanValue();
553+
if ((classOfT == String.class) && settingValue.getStringValue() != null && SettingType.STRING.equals(settingType)) {
554+
return settingValue.getStringValue();
555+
} else if ((classOfT == Integer.class || classOfT == int.class) && settingValue.getIntegerValue() != null && SettingType.INT.equals(settingType)) {
556+
return settingValue.getIntegerValue();
557+
} else if ((classOfT == Double.class || classOfT == double.class) && settingValue.getDoubleValue() != null && SettingType.DOUBLE.equals(settingType)) {
558+
return settingValue.getDoubleValue();
559+
} else if ((classOfT == Boolean.class || classOfT == boolean.class) && settingValue.getBooleanValue() != null && SettingType.BOOLEAN.equals(settingType)) {
560+
return settingValue.getBooleanValue();
559561
}
560562
throw new IllegalArgumentException("The type of a setting must match the type of the specified default value. "
561563
+ "Setting's type was {" + settingType + "} but the default value's type was {" + classOfT + "}. "

src/main/java/com/configcat/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ private Constants() { /* prevent from instantiation*/ }
77
static final long DISTANT_PAST = 0;
88
static final String CONFIG_JSON_NAME = "config_v6.json";
99
static final String SERIALIZATION_FORMAT_VERSION = "v2";
10-
static final String VERSION = "9.0.1";
10+
static final String VERSION = "9.1.0";
1111

1212
static final String SDK_KEY_PROXY_PREFIX = "configcat-proxy/";
1313
static final String SDK_KEY_PREFIX = "configcat-sdk-1";

src/main/java/com/configcat/EvaluateLogger.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,11 @@ public void logTargetingRuleConsequence(TargetingRule targetingRule, String erro
177177
decreaseIndentLevel();
178178
}
179179

180-
public void logPercentageEvaluationReturnValue(int hashValue, int i, int percentage, SettingsValue settingsValue) {
180+
public void logPercentageEvaluationReturnValue(int hashValue, int i, int percentage, SettingValue settingValue) {
181181
if (!isLoggable) {
182182
return;
183183
}
184-
String percentageOptionValue = settingsValue != null ? settingsValue.toString() : INVALID_VALUE;
184+
String percentageOptionValue = settingValue != null ? settingValue.toString() : INVALID_VALUE;
185185
newLine();
186186
append("- Hash value " + hashValue + " selects % option " + (i + 1) + " (" + percentage + "%), '" + percentageOptionValue + "'.");
187187
}
@@ -236,7 +236,7 @@ public void logPrerequisiteFlagEvaluationStart(String prerequisiteFlagKey) {
236236
append("Evaluating prerequisite flag '" + prerequisiteFlagKey + "':");
237237
}
238238

239-
public void logPrerequisiteFlagEvaluationResult(PrerequisiteFlagCondition prerequisiteFlagCondition, SettingsValue prerequisiteFlagValue, boolean result) {
239+
public void logPrerequisiteFlagEvaluationResult(PrerequisiteFlagCondition prerequisiteFlagCondition, SettingValue prerequisiteFlagValue, boolean result) {
240240
if (!isLoggable) {
241241
return;
242242
}
@@ -385,7 +385,7 @@ public static String formatPrerequisiteFlagCondition(PrerequisiteFlagCondition p
385385
if (prerequisiteComparator == null) {
386386
throw new IllegalArgumentException("Prerequisite Flag comparison operator is invalid.");
387387
}
388-
SettingsValue prerequisiteValue = prerequisiteFlagCondition.getValue();
388+
SettingValue prerequisiteValue = prerequisiteFlagCondition.getValue();
389389
String comparisonValue = prerequisiteValue == null ? INVALID_VALUE : prerequisiteValue.toString();
390390
return "Flag '" + prerequisiteFlagKey + "' " + prerequisiteComparator.getName() + " '" + comparisonValue + "'";
391391
}

src/main/java/com/configcat/EvaluationResult.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.configcat;
22

33
class EvaluationResult {
4-
public final SettingsValue value;
4+
public final SettingValue value;
55
public final String variationId;
66
public final TargetingRule matchedTargetingRule;
77
public final PercentageOption matchedPercentageOption;
88

9-
EvaluationResult(SettingsValue value, String variationId, TargetingRule matchedTargetingRule, PercentageOption matchedPercentageOption) {
9+
EvaluationResult(SettingValue value, String variationId, TargetingRule matchedTargetingRule, PercentageOption matchedPercentageOption) {
1010
this.value = value;
1111
this.variationId = variationId;
1212
this.matchedTargetingRule = matchedTargetingRule;

src/main/java/com/configcat/LocalFileDataSource.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,32 +84,32 @@ private void reloadFileContent() {
8484

8585
private Setting convertJsonToSettingsValue(JsonElement jsonElement) {
8686
Setting setting = new Setting();
87-
SettingsValue settingsValue = new SettingsValue();
87+
SettingValue settingValue = new SettingValue();
8888
SettingType settingType;
8989
if (!jsonElement.isJsonPrimitive()) {
9090
throw new IllegalArgumentException("Invalid Config Json content: " + jsonElement);
9191
}
9292
JsonPrimitive primitive = jsonElement.getAsJsonPrimitive();
9393
if (primitive.isBoolean()) {
94-
settingsValue.setBooleanValue(primitive.getAsBoolean());
94+
settingValue.setBooleanValue(primitive.getAsBoolean());
9595
settingType = SettingType.BOOLEAN;
9696
} else if (primitive.isString()) {
97-
settingsValue.setStringValue(primitive.getAsString());
97+
settingValue.setStringValue(primitive.getAsString());
9898
settingType = SettingType.STRING;
9999
} else {
100100
// primitive should be a number, try to cast int to see its not a double
101101
String numberAsSting = primitive.getAsString();
102102
try {
103-
settingsValue.setIntegerValue(Integer.parseInt(numberAsSting));
103+
settingValue.setIntegerValue(Integer.parseInt(numberAsSting));
104104
settingType = SettingType.INT;
105105
} catch (NumberFormatException e) {
106106
// if int parse failed try double parse
107-
settingsValue.setDoubleValue(Double.parseDouble(numberAsSting));
107+
settingValue.setDoubleValue(Double.parseDouble(numberAsSting));
108108
settingType = SettingType.DOUBLE;
109109
}
110110
}
111111

112-
setting.setSettingsValue(settingsValue);
112+
setting.setSettingsValue(settingValue);
113113
setting.setType(settingType);
114114
return setting;
115115
}

src/main/java/com/configcat/LocalMapDataSource.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,23 @@ public Map<String, Setting> getLocalConfiguration() {
2323

2424
private Setting convertToSetting(Object object) {
2525
Setting setting = new Setting();
26-
SettingsValue settingsValue = new SettingsValue();
26+
SettingValue settingValue = new SettingValue();
2727
if (object instanceof String) {
2828
setting.setType(SettingType.STRING);
29-
settingsValue.setStringValue((String) object);
29+
settingValue.setStringValue((String) object);
3030
} else if (object instanceof Boolean) {
3131
setting.setType(SettingType.BOOLEAN);
32-
settingsValue.setBooleanValue((Boolean) object);
32+
settingValue.setBooleanValue((Boolean) object);
3333
} else if (object instanceof Integer) {
3434
setting.setType(SettingType.INT);
35-
settingsValue.setIntegerValue((Integer) object);
35+
settingValue.setIntegerValue((Integer) object);
3636
} else if (object instanceof Double) {
3737
setting.setType(SettingType.DOUBLE);
38-
settingsValue.setDoubleValue((Double) object);
38+
settingValue.setDoubleValue((Double) object);
3939
} else {
4040
throw new IllegalArgumentException("Only String, Integer, Double or Boolean types are supported.");
4141
}
42-
setting.setSettingsValue(settingsValue);
42+
setting.setSettingsValue(settingValue);
4343
return setting;
4444
}
4545
}

src/main/java/com/configcat/PercentageOption.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class PercentageOption {
1010
@SerializedName(value = "p")
1111
private int percentage;
1212
@SerializedName(value = "v")
13-
private SettingsValue value;
13+
private SettingValue value;
1414
@SerializedName(value = "i")
1515
private String variationId;
1616

@@ -25,7 +25,7 @@ public int getPercentage() {
2525
* The value associated with the percentage option.
2626
* Can be a value of the following types: {@link Boolean}, {@link String}, {@link Integer} or {@link Double}.
2727
*/
28-
public SettingsValue getValue() {
28+
public SettingValue getValue() {
2929
return value;
3030
}
3131

src/main/java/com/configcat/PrerequisiteComparator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
*/
66
public enum PrerequisiteComparator {
77
/**
8-
* EQUALS - It matches when the evaluated value of the specified prerequisite flag is equal to the comparison value.
8+
* EQUALS - Checks whether the evaluated value of the specified prerequisite flag is equal to the comparison value.
99
*/
1010
EQUALS(0, "EQUALS"),
1111
/**
12-
* NOT EQUALS - It matches when the evaluated value of the specified prerequisite flag is not equal to the comparison value.
12+
* NOT EQUALS - Checks whether the evaluated value of the specified prerequisite flag is not equal to the comparison value.
1313
*/
1414
NOT_EQUALS(1, "NOT EQUALS");
1515

src/main/java/com/configcat/PrerequisiteFlagCondition.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class PrerequisiteFlagCondition {
1212
@SerializedName(value = "c")
1313
private int prerequisiteComparator;
1414
@SerializedName(value = "v")
15-
private SettingsValue value;
15+
private SettingValue value;
1616

1717
/**
1818
* The key of the prerequisite flag that the condition is based on.
@@ -32,7 +32,7 @@ public int getPrerequisiteComparator() {
3232
* The value that the evaluated value of the prerequisite flag is compared to.
3333
* Can be a value of the following types: {@link Boolean}, {@link String}, {@link Integer} or {@link Double}.
3434
*/
35-
public SettingsValue getValue() {
35+
public SettingValue getValue() {
3636
return value;
3737
}
3838
}

0 commit comments

Comments
 (0)