diff --git a/metafix/src/main/java/org/metafacture/metafix/FixPath.java b/metafix/src/main/java/org/metafacture/metafix/FixPath.java index 28b2d65e..fdff347c 100644 --- a/metafix/src/main/java/org/metafacture/metafix/FixPath.java +++ b/metafix/src/main/java/org/metafacture/metafix/FixPath.java @@ -199,7 +199,12 @@ void apply(final Array array, final String field, final Value value) { else if (path.length >= 1 && Value.isNumber(path[0])) { final int index = Integer.parseInt(path[0]) - 1; // TODO: 0-based Catmandu vs. 1-based Metafacture if (index >= 0 && index < array.size()) { - array.remove(index); + if (path.length == 1) { + array.remove(index); + } + else { + removeNestedFrom(array.get(index)); + } } } } @@ -211,14 +216,17 @@ else if (path.length >= 1 && Value.isNumber(path[0])) { hash.remove(field); } else if (hash.containsField(field)) { - final Value value = hash.get(field); - // TODO: impl and call just value.remove - if (value != null) { - value.matchType() - .ifArray(a -> new FixPath(tail(path)).removeNestedFrom(a)) - .ifHash(h -> new FixPath(tail(path)).removeNestedFrom(h)) - .orElseThrow(); - } + removeNestedFrom(hash.get(field)); + } + } + + private void removeNestedFrom(final Value value) { + // TODO: impl and call just value.remove + if (value != null) { + value.matchType() + .ifArray(a -> new FixPath(tail(path)).removeNestedFrom(a)) + .ifHash(h -> new FixPath(tail(path)).removeNestedFrom(h)) + .orElseThrow(); } } diff --git a/metafix/src/test/java/org/metafacture/metafix/RecordTest.java b/metafix/src/test/java/org/metafacture/metafix/RecordTest.java index d87cb0bf..e25ca980 100644 --- a/metafix/src/test/java/org/metafacture/metafix/RecordTest.java +++ b/metafix/src/test/java/org/metafacture/metafix/RecordTest.java @@ -18,12 +18,10 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import java.util.Arrays; import java.util.function.Consumer; -@ExtendWith(MetafixToDo.Extension.class) public class RecordTest { private static final String FIELD = "field"; @@ -306,7 +304,6 @@ public void shouldFindArrayIndexSubfieldAfterTransformingOtherSubfield() { } @Test - @MetafixToDo("See https://github.com/metafacture/metafacture-fix/pull/170") public void shouldFindArrayIndexSubfieldAfterTransformingOtherSubfieldToNull() { shouldFindArrayIndexSubfield(record -> { final String path = String.join(".", FIELD, "1", OTHER_FIELD); diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldArrayOfStringsWithinArrayOfObjects/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldArrayOfStringsWithinArrayOfObjects/todo.txt deleted file mode 100644 index a5c105df..00000000 --- a/metafix/src/test/resources/org/metafacture/metafix/integration/record/fromJson/toJson/move_fieldArrayOfStringsWithinArrayOfObjects/todo.txt +++ /dev/null @@ -1 +0,0 @@ -See issue #113