Skip to content

Commit

Permalink
Merge #314 from remote-tracking branch 'origin/273-addUriEncodeFunction'
Browse files Browse the repository at this point in the history
  • Loading branch information
dr0i committed Jun 16, 2023
2 parents 4dd061b + b3420ec commit 2294a74
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,14 @@ Upcases all characters in a field value.
upcase("<sourceField>")
```

##### `uri_encode`

Encodes a field value as URI. Aka percent-encoding.

```perl
uri_encode("<sourceField>")
```

### Selectors

#### `reject`
Expand Down
10 changes: 10 additions & 0 deletions metafix/src/main/java/org/metafacture/metafix/FixMethod.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.metafacture.metamorph.api.Maps;
import org.metafacture.metamorph.functions.ISBN;
import org.metafacture.metamorph.functions.Timestamp;
import org.metafacture.metamorph.functions.URLEncode;
import org.metafacture.metamorph.maps.FileMap;

import java.io.File;
Expand Down Expand Up @@ -662,6 +663,15 @@ public void apply(final Metafix metafix, final Record record, final List<String>
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
record.transform(params.get(0), s -> s.toUpperCase());
}
},
uri_encode {
@Override
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
final URLEncode urlEncoder = new URLEncode();
urlEncoder.setPlusForSpace(false);

record.transform(params.get(0), urlEncoder::process);
}
};

private static final Pattern NAMED_GROUP_PATTERN = Pattern.compile("\\(\\?<(.+?)>");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3972,4 +3972,40 @@ public void shouldApplyCustomJavaFunction() {
);
}

@Test
public void shouldUriEncodeString() {
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
"uri_encode('title')"
),
i -> {
i.startRecord("1");
i.literal("title", "café");
i.endRecord();
},
o -> {
o.get().startRecord("1");
o.get().literal("title", "caf%C3%A9");
o.get().endRecord();
}
);
}

@Test
public void shouldUriEncodePathSegment() {
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
"uri_encode('id')"
),
i -> {
i.startRecord("1");
i.literal("id", "slash/990223521400206441:DE-A96:61 TYD 16(3)#!");
i.endRecord();
},
o -> {
o.get().startRecord("1");
o.get().literal("id", "slash%2F990223521400206441%3ADE%2DA96%3A61%20TYD%2016%283%29%23%21");
o.get().endRecord();
}
);
}

}

0 comments on commit 2294a74

Please sign in to comment.