Skip to content

Commit 3798670

Browse files
committed
Fix asterisk handling on insert into array (#113, #121, #130, #156)
1 parent 4ffee79 commit 3798670

File tree

9 files changed

+38
-17
lines changed
  • metafix/src
    • main/java/org/metafacture/metafix
    • test
      • java/org/metafacture/metafix
      • resources/org/metafacture/metafix/integration/record/fromJson/toJson
        • add_fieldAsteriskIntoArrayOfObjects
        • copy_fieldArrayOfObjectsAsRepeatedObjectAndThenArrayOfStringsIntoTheArrayOfObjectsWithLastWildcard
        • copy_fieldArrayOfStringsIntoArrayOfObjectsWithAsteriskWildcard
        • copy_fieldAsteriskIntoArrayOfObjects
        • move_fieldAsteriskIntoArrayOfObjects
        • set_arrayIntoArrayOfObjectsWithAsterisk

9 files changed

+38
-17
lines changed

metafix/src/main/java/org/metafacture/metafix/FixPath.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -250,14 +250,10 @@ private void removeNestedFrom(final Value value) {
250250
// basic idea: reuse findIn logic here? setIn(findIn(array), newValue)
251251
final String field = path[0];
252252
if (field.equals(ASTERISK)) {
253-
if (path.length == 1) {
254-
for (int i = 0; i < array.size(); ++i) {
255-
mode.apply(array, String.valueOf(i + 1), newValue);
256-
}
257-
}
258-
else {
259-
array.add(Value.newHash(h -> new FixPath(tail(path)).insertInto(h, mode, newValue)));
260-
}
253+
array.forEach(value -> value.matchType()
254+
.ifArray(a -> new FixPath(tail(path)).insertInto(a, mode, newValue))
255+
.ifHash(h -> new FixPath(tail(path)).insertInto(h, mode, newValue))
256+
.orElseThrow());
261257
}
262258
else {
263259
if (path.length == 1) {

metafix/src/test/java/org/metafacture/metafix/MetafixMethodTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2369,7 +2369,6 @@ public void shouldSortFieldAndRemoveDuplicates() {
23692369
}
23702370

23712371
@Test
2372-
@MetafixToDo("See https://github.com/metafacture/metafacture-fix/issues/121")
23732372
public void shouldSortArrayFieldWithAsterisk() {
23742373
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
23752374
"sort_field('OTHERS[].*.dnimals[]')"
@@ -2558,7 +2557,6 @@ public void shouldSplitHashField() {
25582557
}
25592558

25602559
@Test
2561-
@MetafixToDo("See https://github.com/metafacture/metafacture-fix/issues/100 and https://github.com/metafacture/metafacture-fix/issues/121")
25622560
public void shouldSplitNestedField() {
25632561
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
25642562
"split_field('others[].*.tools', '--')"
@@ -2607,7 +2605,6 @@ public void shouldSumNumbers() {
26072605
}
26082606

26092607
@Test
2610-
@MetafixToDo("java.lang.IllegalStateException: Expected String, got Array; see https://github.com/metafacture/metafacture-fix/issues/121")
26112608
public void shouldSumArrayFieldWithAsterisk() {
26122609
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
26132610
"sum('OTHERS[].*.dumbers[]')"

metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1685,6 +1685,39 @@ public void setArrayReplaceExisting() {
16851685
});
16861686
}
16871687

1688+
@Test
1689+
// See https://github.com/metafacture/metafacture-fix/issues/130
1690+
public void setArrayInArrayWithAsterisk() {
1691+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1692+
"set_array('foo[].*.test[]', 'test')"),
1693+
i -> {
1694+
i.startRecord("1");
1695+
i.startEntity("foo[]");
1696+
i.startEntity("1");
1697+
i.literal("id", "A");
1698+
i.endEntity();
1699+
i.startEntity("2");
1700+
i.literal("id", "B");
1701+
i.endEntity();
1702+
i.endEntity();
1703+
i.endRecord();
1704+
}, (o, f) -> {
1705+
o.get().startRecord("1");
1706+
o.get().startEntity("foo[]");
1707+
o.get().startEntity("1");
1708+
o.get().literal("id", "A");
1709+
o.get().startEntity("test[]");
1710+
o.get().literal("1", "test");
1711+
f.apply(2).endEntity();
1712+
o.get().startEntity("2");
1713+
o.get().literal("id", "B");
1714+
o.get().startEntity("test[]");
1715+
o.get().literal("1", "test");
1716+
f.apply(3).endEntity();
1717+
o.get().endRecord();
1718+
});
1719+
}
1720+
16881721
@Test
16891722
public void setHash() {
16901723
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(

metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAsteriskIntoArrayOfObjects/todo.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
See issue #132 may also be related to #113
1+
See issue #132

metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldArrayOfStringsIntoArrayOfObjectsWithAsteriskWildcard/todo.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldAsteriskIntoArrayOfObjects/todo.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAsteriskIntoArrayOfObjects/todo.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/set_arrayIntoArrayOfObjectsWithAsterisk/todo.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)