Skip to content

Commit b09ccdd

Browse files
committed
feat(structured): make string replacements case insensitive
1 parent a93894b commit b09ccdd

File tree

2 files changed

+144
-2
lines changed

2 files changed

+144
-2
lines changed

controller/structured_libpostal.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ function setup(libpostalService, should_execute) {
4949
req.clean.parsed_text.housenumber = house_number_field.value;
5050

5151
// remove the first instance of the number and trim whitespace
52-
req.clean.parsed_text.street = _.trim(_.replace(req.clean.parsed_text.address, req.clean.parsed_text.housenumber, ''));
52+
req.clean.parsed_text.street = _.trim(replaceIgnoreCase(req.clean.parsed_text.address, req.clean.parsed_text.housenumber, ''));
5353

5454
// If libpostal have parsed unit then add it for search
5555
const unit_field = findField(response, 'unit');
5656
if(unit_field) {
5757
req.clean.parsed_text.unit = unit_field.value;
5858
// Removing unit from street and trim
59-
req.clean.parsed_text.street = _.trim(_.replace(req.clean.parsed_text.street, req.clean.parsed_text.unit, ''));
59+
req.clean.parsed_text.street = _.trim(replaceIgnoreCase(req.clean.parsed_text.street, req.clean.parsed_text.unit, ''));
6060
}
6161

6262
} else {
@@ -83,4 +83,9 @@ function setup(libpostalService, should_execute) {
8383
return controller;
8484
}
8585

86+
function replaceIgnoreCase(str, match, replacement) {
87+
if (!_.isString(str) || !str.length) { return ''; }
88+
return str.replace(new RegExp(_.escapeRegExp(match), 'i'), replacement);
89+
}
90+
8691
module.exports = setup;

test/unit/controller/structured_libpostal.js

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,143 @@ module.exports.tests.success_conditions = (test, common) => {
340340

341341
});
342342

343+
test('as above, case insensitive', t => {
344+
const service = (req, callback) => {
345+
const response = [
346+
{
347+
label: 'road',
348+
value: 'the street'
349+
},
350+
{
351+
label: 'house_number',
352+
value: '22'
353+
},
354+
{
355+
label: 'unit',
356+
value: '1 th'
357+
}
358+
];
359+
360+
callback(null, response);
361+
};
362+
363+
const controller = libpostal(service, () => true);
364+
365+
const req = {
366+
clean: {
367+
parsed_text: {
368+
address: 'the street 22 1 TH'
369+
}
370+
},
371+
errors: []
372+
};
373+
374+
controller(req, undefined, () => {
375+
t.deepEquals(req, {
376+
clean: {
377+
parsed_text: {
378+
street: 'the street',
379+
housenumber: '22',
380+
unit: '1 th'
381+
}
382+
},
383+
errors: []
384+
}, 'req should have been modified');
385+
386+
t.end();
387+
388+
});
389+
390+
});
391+
392+
test('service returning house_number and road should set req.clean.parsed_text.street', t => {
393+
const service = (req, callback) => {
394+
const response = [
395+
{
396+
label: 'road',
397+
value: 'kinkerstraat'
398+
},
399+
{
400+
label: 'house_number',
401+
value: '175f'
402+
}
403+
];
404+
405+
callback(null, response);
406+
};
407+
408+
const controller = libpostal(service, () => true);
409+
410+
const req = {
411+
clean: {
412+
parsed_text: {
413+
address: 'kinkerstraat 175f'
414+
}
415+
},
416+
errors: []
417+
};
418+
419+
controller(req, undefined, () => {
420+
t.deepEquals(req, {
421+
clean: {
422+
parsed_text: {
423+
street: 'kinkerstraat',
424+
housenumber: '175f'
425+
}
426+
},
427+
errors: []
428+
}, 'req should have been modified');
429+
430+
t.end();
431+
432+
});
433+
434+
});
435+
436+
test('as above, case insensitive', t => {
437+
const service = (req, callback) => {
438+
const response = [
439+
{
440+
label: 'road',
441+
value: 'kinkerstraat'
442+
},
443+
{
444+
label: 'house_number',
445+
value: '175f'
446+
}
447+
];
448+
449+
callback(null, response);
450+
};
451+
452+
const controller = libpostal(service, () => true);
453+
454+
const req = {
455+
clean: {
456+
parsed_text: {
457+
address: 'kinkerstraat 175F'
458+
}
459+
},
460+
errors: []
461+
};
462+
463+
controller(req, undefined, () => {
464+
t.deepEquals(req, {
465+
clean: {
466+
parsed_text: {
467+
street: 'kinkerstraat',
468+
housenumber: '175f'
469+
}
470+
},
471+
errors: []
472+
}, 'req should have been modified');
473+
474+
t.end();
475+
476+
});
477+
478+
});
479+
343480
// test('service returning valid response should convert and append', t => {
344481
// const service = (req, callback) => {
345482
// const response = [

0 commit comments

Comments
 (0)