Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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