From abca2efe3818d9aab3b8a8beac4c53c30add6b92 Mon Sep 17 00:00:00 2001 From: Jens Wille Date: Tue, 11 Jan 2022 16:21:11 +0100 Subject: [PATCH] Add `join_field()` Fix function. (#100) --- .../org/metafacture/metafix/FixMethod.java | 8 +++++++ .../metafix/MetafixMethodTest.java | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/metafix/src/main/java/org/metafacture/metafix/FixMethod.java b/metafix/src/main/java/org/metafacture/metafix/FixMethod.java index 4a9a7f43..2d3504c1 100644 --- a/metafix/src/main/java/org/metafacture/metafix/FixMethod.java +++ b/metafix/src/main/java/org/metafacture/metafix/FixMethod.java @@ -293,6 +293,14 @@ public void apply(final Metafix metafix, final Record record, final List record.transformFields(params, s -> String.valueOf(s.indexOf(search))); // TODO: multiple } }, + join_field { + public void apply(final Metafix metafix, final Record record, final List params, final Map options) { + record.transformField(params.get(0), v -> { + final String joinChar = params.size() > 1 ? params.get(1) : ""; + return v.isArray() ? new Value(v.asArray().stream().map(Value::toString).collect(Collectors.joining(joinChar))) : null; + }); + } + }, lookup { public void apply(final Metafix metafix, final Record record, final List params, final Map options) { final Map map; diff --git a/metafix/src/test/java/org/metafacture/metafix/MetafixMethodTest.java b/metafix/src/test/java/org/metafacture/metafix/MetafixMethodTest.java index 75d0840a..d4d1e6b9 100644 --- a/metafix/src/test/java/org/metafacture/metafix/MetafixMethodTest.java +++ b/metafix/src/test/java/org/metafacture/metafix/MetafixMethodTest.java @@ -625,6 +625,27 @@ public void shouldGetIndexOfSubstring() { ); } + @Test + public void shouldJoinArrayField() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "join_field(numbers, '/')" + ), + i -> { + i.startRecord("1"); + i.literal("numbers", "6"); + i.literal("numbers", "42"); + i.literal("numbers", "41"); + i.literal("numbers", "6"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("numbers", "6/42/41/6"); + o.get().endRecord(); + } + ); + } + @Test public void shouldPrependValue() { MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(