Skip to content

Commit 27e7a3f

Browse files
feat: add getNumberEvaluation method delegating to getDoubleEvaluation (#501)
Signed-off-by: Carla Köberl <[email protected]>
1 parent 15aaf58 commit 27e7a3f

File tree

6 files changed

+47
-2
lines changed

6 files changed

+47
-2
lines changed

src/main/java/dev/openfeature/sdk/FeatureProvider.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,39 @@ default List<Hook> getProviderHooks() {
1515
return new ArrayList<>();
1616
}
1717

18+
/**
19+
* Resolves a feature flag value as a {@link Number}.
20+
*
21+
* @param key the unique identifier for the flag
22+
* @param defaultValue the default value to return if the flag cannot be resolved
23+
* @param ctx the evaluation context containing any relevant information for resolution
24+
* @return a {@link ProviderEvaluation} containing the resolved {@code Number} value and additional evaluation details
25+
*/
26+
default ProviderEvaluation<Number> getNumberEvaluation(String key, Number defaultValue, EvaluationContext ctx) {
27+
ProviderEvaluation<Double> dep = getDoubleEvaluation(key, defaultValue.doubleValue(), ctx);
28+
return new ProviderEvaluation<>(
29+
dep.getValue(),
30+
dep.getReason(),
31+
dep.getVariant(),
32+
dep.getErrorCode(),
33+
dep.getErrorMessage(),
34+
dep.getFlagMetadata());
35+
}
36+
1837
ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defaultValue, EvaluationContext ctx);
1938

2039
ProviderEvaluation<String> getStringEvaluation(String key, String defaultValue, EvaluationContext ctx);
2140

41+
/**
42+
* @deprecated please use {@link #getNumberEvaluation(String, Number, EvaluationContext)}
43+
*/
44+
@Deprecated
2245
ProviderEvaluation<Integer> getIntegerEvaluation(String key, Integer defaultValue, EvaluationContext ctx);
2346

47+
/**
48+
* @deprecated please use {@link #getNumberEvaluation(String, Number, EvaluationContext)}
49+
*/
50+
@Deprecated
2451
ProviderEvaluation<Double> getDoubleEvaluation(String key, Double defaultValue, EvaluationContext ctx);
2552

2653
ProviderEvaluation<Value> getObjectEvaluation(String key, Value defaultValue, EvaluationContext ctx);

src/main/java/dev/openfeature/sdk/FlagValueType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
@SuppressWarnings("checkstyle:MissingJavadocType")
44
public enum FlagValueType {
55
STRING,
6+
NUMBER,
67
INTEGER,
78
DOUBLE,
89
OBJECT,

src/main/java/dev/openfeature/sdk/NoOpProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public ProviderEvaluation<String> getStringEvaluation(String key, String default
4141
}
4242

4343
@Override
44+
@Deprecated
4445
public ProviderEvaluation<Integer> getIntegerEvaluation(String key, Integer defaultValue, EvaluationContext ctx) {
4546
return ProviderEvaluation.<Integer>builder()
4647
.value(defaultValue)
@@ -50,6 +51,7 @@ public ProviderEvaluation<Integer> getIntegerEvaluation(String key, Integer defa
5051
}
5152

5253
@Override
54+
@Deprecated
5355
public ProviderEvaluation<Double> getDoubleEvaluation(String key, Double defaultValue, EvaluationContext ctx) {
5456
return ProviderEvaluation.<Double>builder()
5557
.value(defaultValue)

src/main/java/dev/openfeature/sdk/OpenFeatureClient.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,11 @@ private <T> ProviderEvaluation<?> createProviderEvaluation(
287287
case STRING:
288288
return provider.getStringEvaluation(key, (String) defaultValue, invocationContext);
289289
case INTEGER:
290-
return provider.getIntegerEvaluation(key, (Integer) defaultValue, invocationContext);
290+
return provider.getNumberEvaluation(key, (Integer) defaultValue, invocationContext);
291+
case NUMBER:
292+
return provider.getNumberEvaluation(key, (Number) defaultValue, invocationContext);
291293
case DOUBLE:
292-
return provider.getDoubleEvaluation(key, (Double) defaultValue, invocationContext);
294+
return provider.getNumberEvaluation(key, (Double) defaultValue, invocationContext);
293295
case OBJECT:
294296
return provider.getObjectEvaluation(key, (Value) defaultValue, invocationContext);
295297
default:

src/test/java/dev/openfeature/sdk/NoOpProviderTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,11 @@ void value() {
4141
ProviderEvaluation<Value> eval = p.getObjectEvaluation("key", s, null);
4242
assertEquals(s, eval.getValue());
4343
}
44+
45+
@Test
46+
void noOpNumber() {
47+
NoOpProvider p = new NoOpProvider();
48+
ProviderEvaluation<Number> eval = p.getNumberEvaluation("key", 123456789L, null);
49+
assertEquals(123456789.0, eval.getValue());
50+
}
4451
}

src/test/java/dev/openfeature/sdk/ProviderSpecTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ void flag_value_set() {
4040
ProviderEvaluation<Integer> int_result = p.getIntegerEvaluation("key", 4, new ImmutableContext());
4141
assertNotNull(int_result.getValue());
4242

43+
ProviderEvaluation<Number> number_result = p.getNumberEvaluation("key", 2L, new ImmutableContext());
44+
assertNotNull(number_result.getValue());
45+
4346
ProviderEvaluation<Double> double_result = p.getDoubleEvaluation("key", 0.4, new ImmutableContext());
4447
assertNotNull(double_result.getValue());
4548

@@ -97,6 +100,9 @@ void variant_set() {
97100
ProviderEvaluation<Integer> int_result = p.getIntegerEvaluation("key", 4, new ImmutableContext());
98101
assertNotNull(int_result.getReason());
99102

103+
ProviderEvaluation<Number> number_result = p.getNumberEvaluation("key", 2L, new ImmutableContext());
104+
assertNotNull(number_result.getReason());
105+
100106
ProviderEvaluation<Double> double_result = p.getDoubleEvaluation("key", 0.4, new ImmutableContext());
101107
assertNotNull(double_result.getReason());
102108

0 commit comments

Comments
 (0)