Skip to content

Commit

Permalink
feat(post): add zero_prefixed_house_numbers script
Browse files Browse the repository at this point in the history
  • Loading branch information
missinglink committed Feb 18, 2025
1 parent 1cfe496 commit 3a71c2d
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 1 deletion.
1 change: 1 addition & 0 deletions Document.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ function Document( source, layer, source_id ){
this.addPostProcessingScript( require('./post/intersections') );
this.addPostProcessingScript( require('./post/seperable_street_names').post );
this.addPostProcessingScript( require('./post/alphanumeric_postcodes') );
this.addPostProcessingScript( require('./post/zero_prefixed_house_numbers') );
this.addPostProcessingScript( require('./post/deduplication') );
this.addPostProcessingScript( require('./post/language_field_trimming') );
this.addPostProcessingScript( require('./post/popularity') );
Expand Down
28 changes: 28 additions & 0 deletions post/zero_prefixed_house_numbers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* Zero prefixed house number post-processing script strips leading zeros from
* house numbers. eg. house number `001` -> `1`.
*
* This functionality was previously handled in elasticsearch
* using a `removeAllZeroNumericPrefix` filter, see:
* - https://github.com/pelias/schema/issues/503
*/

const _ = require('lodash');

function housenumber(doc) {

// ensure housenumber is set
let houseno = doc.getAddress('number');
if( !_.isString(houseno) || _.isEmpty(houseno) ){ return; }

// trim leading/trailing whitespace
houseno = houseno.trim();

// only applies to housenumbers prefixed with a zero
if ( houseno.length < 2 || !houseno.startsWith('0') ) { return; }

// trim leading zeros
doc.setAddress('number', houseno.replace(/^0+/, ''));
}

module.exports = housenumber;
3 changes: 2 additions & 1 deletion test/document/post.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ const Document = require('../../Document');
const intersections = require('../../post/intersections');
const seperable_street_names = require('../../post/seperable_street_names').post;
const alphanumeric_postcodes = require('../../post/alphanumeric_postcodes');
const zero_prefixed_house_numbers = require('../../post/zero_prefixed_house_numbers');
const deduplication = require('../../post/deduplication');
const language_field_trimming = require('../../post/language_field_trimming');
const popularity = require('../../post/popularity');
const DEFAULT_SCRIPTS = [
intersections, seperable_street_names, alphanumeric_postcodes,
deduplication, language_field_trimming, popularity
zero_prefixed_house_numbers, deduplication, language_field_trimming, popularity
];

module.exports.tests = {};
Expand Down
90 changes: 90 additions & 0 deletions test/post/zero_prefixed_house_numbers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
const Document = require('../../Document');
const housenumber = require('../../post/zero_prefixed_house_numbers');

module.exports.tests = {};

module.exports.tests.noop = function(test) {
test('noop: house number not set', function(t) {
const doc = new Document('mysource', 'mylayer', 'myid');

housenumber(doc);

// no action taken
t.equal(doc.getAddress('number'), undefined, 'not set');

t.end();
});

test('noop: house no leading zero', function(t) {
const doc = new Document('mysource', 'mylayer', 'myid');
doc.setAddress('number', '10');

housenumber(doc);

// no action taken
t.equal(doc.getAddress('number'), '10', 'no change');

t.end();
});

test('noop: house no is literally zero', function(t) {
const doc = new Document('mysource', 'mylayer', 'myid');
doc.setAddress('number', '0');

housenumber(doc);

// no action taken
t.equal(doc.getAddress('number'), '0', 'no change');

t.end();
});
};

module.exports.tests.strip_prefix = function(test) {
test('strip: house number with zero prefix', function(t) {
const doc = new Document('mysource', 'mylayer', 'myid');
doc.setAddress('number', '010');

housenumber(doc);

// prefix removed
t.equal(doc.getAddress('number'), '10', 'prefix removed');

t.end();
});

test('strip: house number with multiple zero prefix', function(t) {
const doc = new Document('mysource', 'mylayer', 'myid');
doc.setAddress('number', '000000001000');

housenumber(doc);

// prefix removed
t.equal(doc.getAddress('number'), '1000', 'prefix removed');

t.end();
});

test('strip: house number with multiple zero prefix plus multiple whitespace', function(t) {
const doc = new Document('mysource', 'mylayer', 'myid');
doc.setAddress('number', ' 000000009990');

housenumber(doc);

// prefix removed
t.equal(doc.getAddress('number'), '9990', 'prefix removed');

t.end();
});
};

module.exports.all = function (tape, common) {

function test(name, testFunction) {
return tape('post/zero_prefixed_house_numbers: ' + name, testFunction);
}

for( var testCase in module.exports.tests ){
module.exports.tests[testCase](test, common);
}
};
1 change: 1 addition & 0 deletions test/run.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const tests = [
require('./document/post.js'),
require('./post/intersections.js'),
require('./post/alphanumeric_postcodes.js'),
require('./post/zero_prefixed_house_numbers.js'),
require('./post/deduplication.js'),
require('./post/seperable_street_names.js'),
require('./post/language_field_trimming.js'),
Expand Down

0 comments on commit 3a71c2d

Please sign in to comment.