diff --git a/providers/flagd/pom.xml b/providers/flagd/pom.xml index b8f728997..437e9e145 100644 --- a/providers/flagd/pom.xml +++ b/providers/flagd/pom.xml @@ -78,7 +78,7 @@ io.github.jamsesso json-logic-java - 1.0.9 + 1.1.0 diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java index b3f6d7c01..6658aab78 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java @@ -18,7 +18,7 @@ public String key() { return "fractional"; } - public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationException { + public Object evaluate(List arguments, Object data, String jsonPath) throws JsonLogicEvaluationException { if (arguments.size() < 2) { return null; } @@ -53,7 +53,7 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx try { for (Object dist : distibutions) { - FractionProperty fractionProperty = new FractionProperty(dist); + FractionProperty fractionProperty = new FractionProperty(dist, jsonPath); propertyList.add(fractionProperty); totalWeight += fractionProperty.getWeight(); } @@ -63,11 +63,11 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx } // find distribution - return distributeValue(bucketBy, propertyList, totalWeight); + return distributeValue(bucketBy, propertyList, totalWeight, jsonPath); } private static String distributeValue( - final String hashKey, final List propertyList, int totalWeight) + final String hashKey, final List propertyList, int totalWeight, String jsonPath) throws JsonLogicEvaluationException { byte[] bytes = hashKey.getBytes(StandardCharsets.UTF_8); int mmrHash = MurmurHash3.hash32x86(bytes, 0, bytes.length, 0); @@ -83,7 +83,7 @@ private static String distributeValue( } // this shall not be reached - throw new JsonLogicEvaluationException("Unable to find a correct bucket"); + throw new JsonLogicEvaluationException("Unable to find a correct bucket", jsonPath); } @Getter @@ -96,27 +96,28 @@ protected final void finalize() { // DO NOT REMOVE, spotbugs: CT_CONSTRUCTOR_THROW } - FractionProperty(final Object from) throws JsonLogicException { + FractionProperty(final Object from, String jsonPath) throws JsonLogicException { if (!(from instanceof List)) { - throw new JsonLogicException("Property is not an array"); + throw new JsonLogicException("Property is not an array", jsonPath); } final List array = (List) from; if (array.isEmpty()) { - throw new JsonLogicException("Fraction property needs at least one element"); + throw new JsonLogicException("Fraction property needs at least one element", jsonPath); } // first must be a string if (!(array.get(0) instanceof String)) { - throw new JsonLogicException("First element of the fraction property is not a string variant"); + throw new JsonLogicException( + "First element of the fraction property is not a string variant", jsonPath); } variant = (String) array.get(0); if (array.size() >= 2) { // second element must be a number if (!(array.get(1) instanceof Number)) { - throw new JsonLogicException("Second element of the fraction property is not a number"); + throw new JsonLogicException("Second element of the fraction property is not a number", jsonPath); } weight = ((Number) array.get(1)).intValue(); } else { diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java index 223d62f9a..2ab1802a5 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java @@ -37,7 +37,7 @@ public String key() { return "sem_ver"; } - public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationException { + public Object evaluate(List arguments, Object data, String jsonPath) throws JsonLogicEvaluationException { if (arguments.size() != 3) { log.debug("Incorrect number of arguments for sem_ver operator"); @@ -75,10 +75,10 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx return null; } - return compare(arg2Parsed, arg1Parsed, arg3Parsed); + return compare(arg2Parsed, arg1Parsed, arg3Parsed, jsonPath); } - private static boolean compare(final String operator, final Semver arg1, final Semver arg2) + private static boolean compare(final String operator, final Semver arg1, final Semver arg2, final String jsonPath) throws JsonLogicEvaluationException { int comp = arg1.compareTo(arg2); @@ -102,7 +102,7 @@ private static boolean compare(final String operator, final Semver arg1, final S return arg1.getMinor() == arg2.getMinor() && arg1.getMajor() == arg2.getMajor(); default: throw new JsonLogicEvaluationException( - String.format("Unsupported operator received. Operator: %s", operator)); + String.format("Unsupported operator received. Operator: %s", operator), jsonPath); } } } diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java index ce3490ead..9956ca8c6 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java @@ -17,7 +17,7 @@ public String key() { return type.key; } - public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationException { + public Object evaluate(List arguments, Object data, String jsonPath) throws JsonLogicEvaluationException { if (arguments.size() != 2) { log.debug("Incorrect number of arguments for String comparison operator"); return null; diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java index ac3e6e19e..4520c0c66 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java @@ -41,7 +41,7 @@ void validate_emptyJson_targetingReturned(@ConvertWith(FileContentConverter.clas data.put(FLAGD_PROPS_KEY, flagdProperties); // when - Object evaluate = fractional.evaluate(testData.rule, data); + Object evaluate = fractional.evaluate(testData.rule, data, "path"); // then assertEquals(testData.result, evaluate); diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java index 36a199e96..9448ca79c 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java @@ -33,7 +33,7 @@ void testValidCases(List args) throws JsonLogicEvaluationException { final SemVer semVer = new SemVer(); // when - Object result = semVer.evaluate(args, new Object()); + Object result = semVer.evaluate(args, new Object(), "jsonPath"); // then if (!(result instanceof Boolean)) { @@ -58,6 +58,6 @@ void testInvalidCases(List args) throws JsonLogicEvaluationException { final SemVer semVer = new SemVer(); // then - assertNull(semVer.evaluate(args, new Object())); + assertNull(semVer.evaluate(args, new Object(), "jsonPath")); } } diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java index 2ba8268dc..028f7ac8f 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java @@ -15,7 +15,7 @@ public void startsWithEvaluation() throws JsonLogicEvaluationException { final StringComp startsWith = new StringComp(StringComp.Type.STARTS_WITH); // when - Object result = startsWith.evaluate(Arrays.asList("abc@123.com", "abc"), new Object()); + Object result = startsWith.evaluate(Arrays.asList("abc@123.com", "abc"), new Object(), "jsonPath"); // then if (!(result instanceof Boolean)) { @@ -31,7 +31,7 @@ public void endsWithEvaluation() throws JsonLogicEvaluationException { final StringComp endsWith = new StringComp(StringComp.Type.ENDS_WITH); // when - Object result = endsWith.evaluate(Arrays.asList("abc@123.com", "123.com"), new Object()); + Object result = endsWith.evaluate(Arrays.asList("abc@123.com", "123.com"), new Object(), "jsonPath"); // then if (!(result instanceof Boolean)) { @@ -47,7 +47,7 @@ public void invalidTypeCheckArg1() throws JsonLogicEvaluationException { final StringComp operator = new StringComp(StringComp.Type.STARTS_WITH); // when - Object result = operator.evaluate(Arrays.asList(1230, "12"), new Object()); + Object result = operator.evaluate(Arrays.asList(1230, "12"), new Object(), "jsonPath"); // then assertThat(result).isNull(); @@ -59,7 +59,7 @@ public void invalidTypeCheckArg2() throws JsonLogicEvaluationException { final StringComp operator = new StringComp(StringComp.Type.STARTS_WITH); // when - Object result = operator.evaluate(Arrays.asList("abc@123.com", 123), new Object()); + Object result = operator.evaluate(Arrays.asList("abc@123.com", 123), new Object(), "jsonPath"); // then assertThat(result).isNull(); @@ -71,7 +71,7 @@ public void invalidNumberOfArgs() throws JsonLogicEvaluationException { final StringComp operator = new StringComp(StringComp.Type.STARTS_WITH); // when - Object result = operator.evaluate(Arrays.asList("123", "12", "1"), new Object()); + Object result = operator.evaluate(Arrays.asList("123", "12", "1"), new Object(), "jsonPath"); // then assertThat(result).isNull(); diff --git a/providers/jsonlogic-eval-provider/pom.xml b/providers/jsonlogic-eval-provider/pom.xml index 80a230ec6..9148a1a2f 100644 --- a/providers/jsonlogic-eval-provider/pom.xml +++ b/providers/jsonlogic-eval-provider/pom.xml @@ -34,7 +34,7 @@ io.github.jamsesso json-logic-java - 1.0.9 + 1.1.0 org.json