Skip to content

Commit 307a416

Browse files
committed
Add uri_encode (#273)
Use metamorph's URLEncoder for uri_encode.
1 parent 4dd061b commit 307a416

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.metafacture.metamorph.api.Maps;
2222
import org.metafacture.metamorph.functions.ISBN;
2323
import org.metafacture.metamorph.functions.Timestamp;
24+
import org.metafacture.metamorph.functions.URLEncode;
2425
import org.metafacture.metamorph.maps.FileMap;
2526

2627
import java.io.File;
@@ -662,8 +663,16 @@ public void apply(final Metafix metafix, final Record record, final List<String>
662663
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
663664
record.transform(params.get(0), s -> s.toUpperCase());
664665
}
666+
},
667+
uri_encode {
668+
@Override
669+
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
670+
URL_ENCODER.setPlusForSpace(false);
671+
record.transform(params.get(0), URL_ENCODER::process);
672+
}
665673
};
666674

675+
private static final URLEncode URL_ENCODER = new URLEncode();
667676
private static final Pattern NAMED_GROUP_PATTERN = Pattern.compile("\\(\\?<(.+?)>");
668677

669678
private static final String FILEMAP_SEPARATOR_OPTION = "sep_char";

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3972,4 +3972,40 @@ public void shouldApplyCustomJavaFunction() {
39723972
);
39733973
}
39743974

3975+
@Test
3976+
public void shouldUriEncodeString() {
3977+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
3978+
"uri_encode('title')"
3979+
),
3980+
i -> {
3981+
i.startRecord("1");
3982+
i.literal("title", "café");
3983+
i.endRecord();
3984+
},
3985+
o -> {
3986+
o.get().startRecord("1");
3987+
o.get().literal("title", "caf%C3%A9");
3988+
o.get().endRecord();
3989+
}
3990+
);
3991+
}
3992+
3993+
@Test
3994+
public void shouldUriEncodePathSegment() {
3995+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
3996+
"uri_encode('id')"
3997+
),
3998+
i -> {
3999+
i.startRecord("1");
4000+
i.literal("id", "slash/990223521400206441:DE-A96:61 TYD 16(3)#!");
4001+
i.endRecord();
4002+
},
4003+
o -> {
4004+
o.get().startRecord("1");
4005+
o.get().literal("id", "slash%2F990223521400206441%3ADE%2DA96%3A61%20TYD%2016%283%29%23%21");
4006+
o.get().endRecord();
4007+
}
4008+
);
4009+
}
4010+
39754011
}

0 commit comments

Comments
 (0)