diff --git a/.travis.yml b/.travis.yml index f91c3dfc..5aec4536 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,15 +5,14 @@ notifications: node_js: - 6 - 8 + - 10 matrix: fast_finish: true script: npm run travis before_install: - npm i -g npm -before_script: - - npm prune after_success: - - npm run semantic-release + - npx semantic-release branches: except: - /^v\d+\.\d+\.\d+$/ diff --git a/controller/structured_libpostal.js b/controller/structured_libpostal.js index 626bf945..f9362471 100644 --- a/controller/structured_libpostal.js +++ b/controller/structured_libpostal.js @@ -3,19 +3,20 @@ const Debug = require('../helper/debug'); const debugLog = new Debug('controller:libpostal'); const logger = require('pelias-logger').get('api'); -// if there's a house_number in the libpostal response, return it -// otherwise return the postcode field (which may be undefined) -function findHouseNumberField(response) { - const house_number_field = response.find(f => f.label === 'house_number'); - - if (house_number_field) { - return house_number_field; +// Find field in libpostal response +function findField(response, field, replacementField) { + const libpostalField = response.find(f => f.label === field); + + if (libpostalField) { + return libpostalField; + } else if(replacementField) { + return response.find(f => f.label === replacementField); + } else { + return; } - - return response.find(f => f.label === 'postcode'); - } + function setup(libpostalService, should_execute) { function controller( req, res, next ){ // bail early if req/res don't pass conditions for execution @@ -35,7 +36,9 @@ function setup(libpostalService, should_execute) { // libpostal parses some inputs, like `3370 cobbe ave`, as a postcode+street // so because we're treating the entire field as a street address, it's safe // to assume that an identified postcode is actually a house number. - const house_number_field = findHouseNumberField(response); + // if there's a house_number in the libpostal response, return it + // otherwise return the postcode field (which may be undefined) + const house_number_field = findField(response, 'house_number', 'postcode'); // if we're fairly certain that libpostal identified a house number // (from either the house_number or postcode field), place it into the @@ -48,6 +51,14 @@ function setup(libpostalService, should_execute) { // remove the first instance of the number and trim whitespace req.clean.parsed_text.street = _.trim(_.replace(req.clean.parsed_text.address, req.clean.parsed_text.number, '')); + // If libpostal have parsed unit then add it for search + const unit_field = findField(response, 'unit'); + if(unit_field) { + req.clean.parsed_text.unit = unit_field.value; + // Removing unit from street and trim + req.clean.parsed_text.street = _.trim(_.replace(req.clean.parsed_text.street, req.clean.parsed_text.unit, '')); + } + } else { // otherwise no house number was identifiable, so treat the entire input // as a street diff --git a/package.json b/package.json index 50f7d81f..34af521a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pelias-api", - "version": "0.0.0-semantic-release", + "version": "0.0.0-development", "author": "pelias", "description": "Pelias API", "homepage": "https://github.com/pelias/api", @@ -14,12 +14,10 @@ "lint": "jshint .", "start": "./bin/start", "test": "npm run unit", - "travis": "npm run check-dependencies && npm test", + "travis": "npm test", "unit": "./bin/units", "validate": "npm ls", - "semantic-release": "semantic-release pre && npm publish && semantic-release post", "config": "node -e \"console.log(JSON.stringify(require( 'pelias-config' ).generate(require('./schema')), null, 2))\"", - "check-dependencies": "node_modules/.bin/npm-check --production --ignore pelias-interpolation", "prune": "npm prune" }, "repository": { @@ -72,7 +70,6 @@ "difflet": "^1.0.1", "istanbul": "^0.4.2", "jshint": "^2.5.6", - "npm-check": "git://github.com/orangejulius/npm-check.git#disable-update-check", "nsp": "^3.0.0", "pelias-mock-logger": "1.2.0", "precommit-hook": "^3.0.0", @@ -88,7 +85,9 @@ "lint", "prune", "validate", - "test", - "check-dependencies" - ] + "test" + ], + "release": { + "branch": "production" + } } diff --git a/public/apiDoc.md b/public/apiDoc.md index 4e3ce186..e0026593 100644 --- a/public/apiDoc.md +++ b/public/apiDoc.md @@ -1 +1 @@ -## [View our documentation on GitHub](https://github.com/pelias/pelias-doc/blob/master/index.md) +## [View our documentation on GitHub](https://github.com/pelias/documentation/) diff --git a/test/unit/controller/structured_libpostal.js b/test/unit/controller/structured_libpostal.js index 142d8260..16660459 100644 --- a/test/unit/controller/structured_libpostal.js +++ b/test/unit/controller/structured_libpostal.js @@ -291,6 +291,55 @@ module.exports.tests.success_conditions = (test, common) => { }); + test('service returning house_number and unit should set req.clean.parsed_text.unit', t => { + const service = (req, callback) => { + const response = [ + { + label: 'road', + value: 'the street' + }, + { + label: 'house_number', + value: '22' + }, + { + label: 'unit', + value: '1 th' + } + ]; + + callback(null, response); + }; + + const controller = libpostal(service, () => true); + + const req = { + clean: { + parsed_text: { + address: 'the street 22 1 th' + } + }, + errors: [] + }; + + controller(req, undefined, () => { + t.deepEquals(req, { + clean: { + parsed_text: { + street: 'the street', + number: '22', + unit: '1 th' + } + }, + errors: [] + }, 'req should have been modified'); + + t.end(); + + }); + + }); + // test('service returning valid response should convert and append', t => { // const service = (req, callback) => { // const response = [