Skip to content

Commit 896d77b

Browse files
authored
Merge pull request #26 from sidhant92/nested_fields_n
Support nesting upto n Levels
2 parents f9bf0fb + fa505b9 commit 896d77b

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/main/java/com/github/sidhant92/boolparser/util/ValueUtils.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.github.sidhant92.boolparser.util;
22

3+
import java.util.Arrays;
34
import java.util.Map;
45
import java.util.Optional;
6+
import java.util.stream.Collectors;
57
import org.apache.maven.artifact.versioning.ComparableVersion;
68
import com.github.sidhant92.boolparser.constant.DataType;
79
import lombok.extern.slf4j.Slf4j;
@@ -17,7 +19,10 @@ public static Optional<Object> getValueFromMap(final String key, final Map<Strin
1719
}
1820
if (fieldData.isPresent() && fieldData.get() instanceof Map) {
1921
try {
20-
return getValueFromMap(keys[1], (Map<String, Object>) fieldData.get());
22+
final String newKey = Arrays
23+
.stream(keys).skip(1)
24+
.collect(Collectors.joining("."));
25+
return getValueFromMap(newKey, (Map<String, Object>) fieldData.get());
2126
} catch (ClassCastException ex) {
2227
return Optional.empty();
2328
}
@@ -40,10 +45,10 @@ public static Object convertValue(final String value, final DataType dataType) {
4045
new ComparableVersion(value);
4146
default:
4247
if (value.startsWith("'") && value.endsWith("'")) {
43-
return value.substring(1, value.length() -1);
48+
return value.substring(1, value.length() - 1);
4449
}
4550
if (value.startsWith("\"") && value.endsWith("\"")) {
46-
return value.substring(1, value.length() -1);
51+
return value.substring(1, value.length() - 1);
4752
}
4853
return value;
4954
}

src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,19 @@ public void testNestedField() {
123123
assertTrue(booleanOptional.get());
124124
}
125125

126+
@Test
127+
public void testTwoNestedField() {
128+
final Map<String, Object> data = new HashMap<>();
129+
final Map<String, Object> person = new HashMap<>();
130+
final Map<String, Object> details = new HashMap<>();
131+
details.put("age", 24);
132+
person.put("details", details);
133+
data.put("person", person);
134+
final Try<Boolean> booleanOptional = booleanExpressionEvaluator.evaluate("person.details.age > 20", data);
135+
assertTrue(booleanOptional.isSuccess());
136+
assertTrue(booleanOptional.get());
137+
}
138+
126139
@Test
127140
public void testMissingNestedField() {
128141
final Map<String, Object> data = new HashMap<>();

0 commit comments

Comments
 (0)