Skip to content

Commit b09ca4f

Browse files
committed
Support implicit array creation on $append (#127)
1 parent 19bbe2c commit b09ca4f

File tree

12 files changed

+55
-11
lines changed
  • metafix/src
    • main/java/org/metafacture/metafix
    • test
      • java/org/metafacture/metafix
      • resources/org/metafacture/metafix/integration/record/fromJson/toJson
        • add_fieldAppendAndCreateArrayOfObjectsInArrayOfObjects
        • add_fieldAppendAndCreateArrayOfObjects
        • add_fieldAppendAndCreateArrayOfStringsInArrayOfObjects
        • add_fieldAppendAndCreateArrayOfStrings
        • add_fieldAppendAndCreateNestedArrayOfStrings
        • copy_fieldAppendAndCreateArrayOfStringsInArrayOfObjects
        • copy_fieldAppendAndCreateArrayOfStrings
        • move_fieldAppendAndCreateArrayOfStringsInArrayOfObjects
        • move_fieldAppendAndCreateArrayOfStrings
        • move_fieldAppendAndCreateNestedArrayOfStrings

12 files changed

+55
-11
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,16 @@ else if (isReference(field)) {
276276
}
277277
else {
278278
if (!hash.containsField(field)) {
279-
hash.put(field, Value.newHash().withPathSet(newValue.getPath()));
279+
if (ReservedField.$append.name().equals(tail(path)[0])) {
280+
hash.put(field, Value.newArray().withPathSet(newValue.getPath()));
281+
}
282+
else {
283+
hash.put(field, Value.newHash().withPathSet(newValue.getPath()));
284+
}
285+
}
286+
final Value value = hash.get(field);
287+
if (value.isString()) {
288+
hash.put(field, Value.newArray(a -> a.add(value)));
280289
}
281290
insertInto(hash.get(field), mode, newValue, field, tail(path));
282291
}

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,51 @@ public void addWithAppendInNewArray() {
303303
);
304304
}
305305

306+
@Test
307+
public void addWithAppendInImplicitArray() {
308+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
309+
"add_field('my.name.$append','patrick')",
310+
"add_field('my.name.$append','nicolas')"
311+
),
312+
i -> {
313+
i.startRecord("1");
314+
i.endRecord();
315+
316+
i.startRecord("2");
317+
i.startEntity("my");
318+
i.literal("name", "max");
319+
i.endEntity();
320+
i.endRecord();
321+
322+
i.startRecord("3");
323+
i.endRecord();
324+
},
325+
o -> {
326+
o.get().startRecord("1");
327+
o.get().startEntity("my");
328+
o.get().literal("name", "patrick");
329+
o.get().literal("name", "nicolas");
330+
o.get().endEntity();
331+
o.get().endRecord();
332+
333+
o.get().startRecord("2");
334+
o.get().startEntity("my");
335+
o.get().literal("name", "max");
336+
o.get().literal("name", "patrick");
337+
o.get().literal("name", "nicolas");
338+
o.get().endEntity();
339+
o.get().endRecord();
340+
341+
o.get().startRecord("3");
342+
o.get().startEntity("my");
343+
o.get().literal("name", "patrick");
344+
o.get().literal("name", "nicolas");
345+
o.get().endEntity();
346+
o.get().endRecord();
347+
}
348+
);
349+
}
350+
306351
@Test
307352
public void addWithAppendInArray() {
308353
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0 commit comments

Comments
 (0)