From 0de7fb9a98a6257c4b4c7cae8b1c7490ef096feb Mon Sep 17 00:00:00 2001 From: Fabian Steeg Date: Tue, 24 Sep 2024 09:01:47 +0200 Subject: [PATCH] Support implicit array creation on `$append` (#127) --- .../java/org/metafacture/metafix/FixPath.java | 13 +++++- .../metafix/MetafixRecordTest.java | 45 +++++++++++++++++++ .../todo.txt | 1 - .../todo.txt | 1 - .../todo.txt | 1 - .../todo.txt | 1 - .../todo.txt | 1 - .../todo.txt | 1 - .../todo.txt | 1 - .../todo.txt | 1 - .../todo.txt | 1 - .../todo.txt | 1 - 12 files changed, 56 insertions(+), 12 deletions(-) delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfObjects/todo.txt delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfObjectsInArrayOfObjects/todo.txt delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfStrings/todo.txt delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateNestedArrayOfStrings/todo.txt delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldAppendAndCreateArrayOfStrings/todo.txt delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateArrayOfStrings/todo.txt delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt delete mode 100644 metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateNestedArrayOfStrings/todo.txt diff --git a/metafix/src/main/java/org/metafacture/metafix/FixPath.java b/metafix/src/main/java/org/metafacture/metafix/FixPath.java index ec35670c..b91b9a44 100644 --- a/metafix/src/main/java/org/metafacture/metafix/FixPath.java +++ b/metafix/src/main/java/org/metafacture/metafix/FixPath.java @@ -276,9 +276,18 @@ else if (isReference(field)) { } else { if (!hash.containsField(field)) { - hash.put(field, Value.newHash().withPathSet(newValue.getPath())); + if (ReservedField.$append.name().equals(tail(path)[0])) { + hash.put(field, Value.newArray().withPathSet(newValue.getPath())); + } + else { + hash.put(field, Value.newHash().withPathSet(newValue.getPath())); + } + } + final Value value = hash.get(field); + if (value.isString()) { + hash.put(field, Value.newArray(a -> a.add(value))); } - insertInto(hash.get(field), mode, newValue, field, tail(path)); + insertInto(value, mode, newValue, field, tail(path)); } return new Value(hash); diff --git a/metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java b/metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java index 67e6ea77..80119922 100644 --- a/metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java +++ b/metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java @@ -303,6 +303,51 @@ public void addWithAppendInNewArray() { ); } + @Test + public void addWithAppendInImplicitArray() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "add_field('my.name.$append','patrick')", + "add_field('my.name.$append','nicolas')" + ), + i -> { + i.startRecord("1"); + i.endRecord(); + + i.startRecord("2"); + i.startEntity("my"); + i.literal("name", "max"); + i.endEntity(); + i.endRecord(); + + i.startRecord("3"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().startEntity("my"); + o.get().literal("name", "patrick"); + o.get().literal("name", "nicolas"); + o.get().endEntity(); + o.get().endRecord(); + + o.get().startRecord("2"); + o.get().startEntity("my"); + o.get().literal("name", "max"); + o.get().literal("name", "patrick"); + o.get().literal("name", "nicolas"); + o.get().endEntity(); + o.get().endRecord(); + + o.get().startRecord("3"); + o.get().startEntity("my"); + o.get().literal("name", "patrick"); + o.get().literal("name", "nicolas"); + o.get().endEntity(); + o.get().endRecord(); + } + ); + } + @Test public void addWithAppendInArray() { MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfObjects/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfObjects/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfObjects/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfObjectsInArrayOfObjects/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfObjectsInArrayOfObjects/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfObjectsInArrayOfObjects/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfStrings/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfStrings/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfStrings/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateNestedArrayOfStrings/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateNestedArrayOfStrings/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/add_fieldAppendAndCreateNestedArrayOfStrings/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldAppendAndCreateArrayOfStrings/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldAppendAndCreateArrayOfStrings/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldAppendAndCreateArrayOfStrings/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/copy_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateArrayOfStrings/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateArrayOfStrings/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateArrayOfStrings/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateArrayOfStringsInArrayOfObjects/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateNestedArrayOfStrings/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateNestedArrayOfStrings/todo.txt deleted file mode 100644 index 636eae9f..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldAppendAndCreateNestedArrayOfStrings/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #127