Skip to content

Commit 2294a74

Browse files
committed
Merge #314 from remote-tracking branch 'origin/273-addUriEncodeFunction'
2 parents 4dd061b + b3420ec commit 2294a74

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,14 @@ Upcases all characters in a field value.
716716
upcase("<sourceField>")
717717
```
718718

719+
##### `uri_encode`
720+
721+
Encodes a field value as URI. Aka percent-encoding.
722+
723+
```perl
724+
uri_encode("<sourceField>")
725+
```
726+
719727
### Selectors
720728

721729
#### `reject`

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

Lines changed: 10 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,6 +663,15 @@ 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+
final URLEncode urlEncoder = new URLEncode();
671+
urlEncoder.setPlusForSpace(false);
672+
673+
record.transform(params.get(0), urlEncoder::process);
674+
}
665675
};
666676

667677
private static final Pattern NAMED_GROUP_PATTERN = Pattern.compile("\\(\\?<(.+?)>");

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)