Skip to content

Commit f37bae7

Browse files
committed
Double support
1 parent 709b589 commit f37bae7

File tree

5 files changed

+58
-3
lines changed

5 files changed

+58
-3
lines changed

src/main/java/dev/openfeature/javasdk/Features.java

+9
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@ public interface Features {
2929
FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defaultValue, EvaluationContext ctx);
3030
FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
3131

32+
Double getDoubleValue(String key, Double defaultValue);
33+
Double getDoubleValue(String key, Double defaultValue, EvaluationContext ctx);
34+
Double getDoubleValue(String key, Double defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
35+
36+
FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue);
37+
FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue, EvaluationContext ctx);
38+
FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
39+
40+
3241
<T> T getObjectValue(String key, T defaultValue);
3342
<T> T getObjectValue(String key, T defaultValue, EvaluationContext ctx);
3443
<T> T getObjectValue(String key, T defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package dev.openfeature.javasdk;
22

33
public enum FlagValueType {
4-
STRING, INTEGER, OBJECT, BOOLEAN;
4+
STRING, INTEGER, DOUBLE, OBJECT, BOOLEAN;
55
}

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

+32
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ private <T> ProviderEvaluation<?> createProviderEvaluation(
8585
return provider.getStringEvaluation(key, (String) defaultValue, invocationContext, options);
8686
case INTEGER:
8787
return provider.getIntegerEvaluation(key, (Integer) defaultValue, invocationContext, options);
88+
case DOUBLE:
89+
return provider.getDoubleEvaluation(key, (Double) defaultValue, invocationContext, options);
8890
case OBJECT:
8991
return provider.getObjectEvaluation(key, defaultValue, invocationContext, options);
9092
default:
@@ -182,6 +184,36 @@ public FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defa
182184
return this.evaluateFlag(FlagValueType.INTEGER, key, defaultValue, ctx, options);
183185
}
184186

187+
@Override
188+
public Double getDoubleValue(String key, Double defaultValue) {
189+
return getDoubleValue(key, defaultValue, null);
190+
}
191+
192+
@Override
193+
public Double getDoubleValue(String key, Double defaultValue, EvaluationContext ctx) {
194+
return getDoubleValue(key, defaultValue, ctx, null);
195+
}
196+
197+
@Override
198+
public Double getDoubleValue(String key, Double defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
199+
return this.evaluateFlag(FlagValueType.DOUBLE, key, defaultValue, ctx, options).getValue();
200+
}
201+
202+
@Override
203+
public FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue) {
204+
return getDoubleDetails(key, defaultValue, null);
205+
}
206+
207+
@Override
208+
public FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue, EvaluationContext ctx) {
209+
return getDoubleDetails(key, defaultValue, ctx, null);
210+
}
211+
212+
@Override
213+
public FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
214+
return this.evaluateFlag(FlagValueType.DOUBLE, key, defaultValue, ctx, options);
215+
}
216+
185217
@Override
186218
public <T> T getObjectValue(String key, T defaultValue) {
187219
return getObjectDetails(key, defaultValue).getValue();

src/test/java/dev/openfeature/javasdk/FlagEvaluationSpecTest.java

+14-2
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ private Client _client() {
7474
assertTrue(hooks.contains(m1));
7575
assertTrue(hooks.contains(m2));
7676
}
77-
@Specification(number="1.3.1", text="The client MUST provide methods for flag evaluation, with parameters flag key (string, required), default value (boolean | number | string | structure, required), evaluation context (optional), and evaluation options (optional), which returns the flag value.")
78-
@Specification(number="1.3.2.1", text="The client MUST provide methods for typed flag evaluation, including boolean, numeric, string, and structure.")
77+
@Specification(number="1.3.1", text="The client MUST provide methods for typed flag evaluation, including boolean, numeric, string, and structure, with parameters flag key (string, required), default value (boolean | number | string | structure, required), evaluation context (optional), and evaluation options (optional), which returns the flag value.")
78+
@Specification(number="1.3.2.1", text="The client SHOULD provide functions for floating-point numbers and integers, consistent with language idioms.")
7979
@Test void value_flags() {
8080
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
8181
api.setProvider(new DoSomethingProvider());
@@ -95,6 +95,10 @@ private Client _client() {
9595
assertEquals(400, c.getIntegerValue(key, 4, new EvaluationContext()));
9696
assertEquals(400, c.getIntegerValue(key, 4, new EvaluationContext(), FlagEvaluationOptions.builder().build()));
9797

98+
assertEquals(40.0, c.getDoubleValue(key, .4));
99+
assertEquals(40.0, c.getDoubleValue(key, .4, new EvaluationContext()));
100+
assertEquals(40.0, c.getDoubleValue(key, .4, new EvaluationContext(), FlagEvaluationOptions.builder().build()));
101+
98102
assertEquals(null, c.getObjectValue(key, new Node<Integer>()));
99103
assertEquals(null, c.getObjectValue(key, new Node<Integer>(), new EvaluationContext()));
100104
assertEquals(null, c.getObjectValue(key, new Node<Integer>(), new EvaluationContext(), FlagEvaluationOptions.builder().build()));
@@ -138,6 +142,14 @@ private Client _client() {
138142
assertEquals(id, c.getIntegerDetails(key, 4, new EvaluationContext()));
139143
assertEquals(id, c.getIntegerDetails(key, 4, new EvaluationContext(), FlagEvaluationOptions.builder().build()));
140144

145+
FlagEvaluationDetails<Double> dd = FlagEvaluationDetails.<Double>builder()
146+
.flagKey(key)
147+
.value(40.0)
148+
.build();
149+
assertEquals(dd, c.getDoubleDetails(key, .4));
150+
assertEquals(dd, c.getDoubleDetails(key, .4, new EvaluationContext()));
151+
assertEquals(dd, c.getDoubleDetails(key, .4, new EvaluationContext(), FlagEvaluationOptions.builder().build()));
152+
141153
// TODO: Structure detail tests.
142154
}
143155

src/test/java/dev/openfeature/javasdk/HookSupportTest.java

+2
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ private Object createDefaultValue(FlagValueType flagValueType) {
6262
return "defaultValue";
6363
case OBJECT:
6464
return "object";
65+
case DOUBLE:
66+
return "double";
6567
default:
6668
throw new IllegalArgumentException();
6769
}

0 commit comments

Comments
 (0)