diff --git a/DOCS.md b/DOCS.md index ccf2d236..4d8b059f 100644 --- a/DOCS.md +++ b/DOCS.md @@ -100,15 +100,14 @@ The reverse geocoding endpoint; matches a point on the planet to the name of tha * `details` (default: `true`) -## /place +## /doc -The endpoint for retrieving one or more places with specific ids. These correspond -directly with Elasticsearch documents. +The endpoint for retrieving one or more elasticsearch documents with specific ids. #### Required Parameters * one of `id` or `ids` * `id`: - * unique id of the places to be retrieved + * unique id of the document to be retrieved * should be in the form of type:id, for example: `geoname:4163334` * `ids`: - * if multiple places are to be fetched in bulk, an array of ids + * if multiple docs are to be fetched in bulk, an array of ids diff --git a/app.js b/app.js index ccdd5116..c0b72610 100644 --- a/app.js +++ b/app.js @@ -15,7 +15,7 @@ app.use( require('./middleware/jsonp') ); /** ----------------------- sanitisers ----------------------- **/ var sanitisers = {}; -sanitisers.place = require('./sanitiser/place'); +sanitisers.doc = require('./sanitiser/doc'); sanitisers.suggest = require('./sanitiser/suggest'); sanitisers.search = require('./sanitiser/search'); sanitisers.coarse = require('./sanitiser/coarse'); @@ -25,7 +25,7 @@ sanitisers.reverse = require('./sanitiser/reverse'); var controllers = {}; controllers.index = require('./controller/index'); -controllers.place = require('./controller/place'); +controllers.doc = require('./controller/doc'); controllers.search = require('./controller/search'); /** ----------------------- routes ----------------------- **/ @@ -33,8 +33,8 @@ controllers.search = require('./controller/search'); // api root app.get( '/', controllers.index() ); -// place API -app.get( '/place', sanitisers.place.middleware, controllers.place() ); +// doc API +app.get( '/doc', sanitisers.doc.middleware, controllers.doc() ); // suggest APIs app.get( '/suggest', sanitisers.search.middleware, controllers.search() ); @@ -54,4 +54,4 @@ app.use( require('./middleware/404') ); app.use( require('./middleware/408') ); app.use( require('./middleware/500') ); -module.exports = app; +module.exports = app; \ No newline at end of file diff --git a/controller/place.js b/controller/doc.js similarity index 98% rename from controller/place.js rename to controller/doc.js index 42cb0069..76e10c3e 100644 --- a/controller/place.js +++ b/controller/doc.js @@ -1,11 +1,14 @@ + var service = { mget: require('../service/mget') }; var geojsonify = require('../helper/geojsonify').search; function setup( backend ){ + // allow overriding of dependencies backend = backend || require('../src/backend'); - + function controller( req, res, next ){ + var query = req.clean.ids.map( function(id) { return { _index: 'pelias', @@ -15,6 +18,7 @@ function setup( backend ){ }); service.mget( backend, query, function( err, docs ){ + // error handler if( err ){ return next( err ); } @@ -26,7 +30,9 @@ function setup( backend ){ // respond return res.status(200).json( geojson ); + }); + } return controller; diff --git a/sanitiser/place.js b/sanitiser/doc.js similarity index 99% rename from sanitiser/place.js rename to sanitiser/doc.js index 352777a6..07f07aa1 100644 --- a/sanitiser/place.js +++ b/sanitiser/doc.js @@ -1,3 +1,4 @@ + var _sanitize = require('../sanitiser/_sanitize'), sanitizers = { id: require('../sanitiser/_id'), diff --git a/test/ciao/place/msuccess.coffee b/test/ciao/doc/msuccess.coffee similarity index 68% rename from test/ciao/place/msuccess.coffee rename to test/ciao/doc/msuccess.coffee index 5c69eab1..56808be4 100644 --- a/test/ciao/place/msuccess.coffee +++ b/test/ciao/doc/msuccess.coffee @@ -1,6 +1,6 @@ -#> valid place query -path: '/place?id=geoname:4221195&id=geoname:4193595' +#> valid doc query +path: '/doc?id=geoname:4221195&id=geoname:4193595' #? 200 ok response.statusCode.should.equal 200 @@ -13,4 +13,4 @@ json.date.should.be.within now-5000, now+5000 #? valid geojson json.type.should.equal 'FeatureCollection' -json.features.should.be.instanceof Array +json.features.should.be.instanceof Array \ No newline at end of file diff --git a/test/ciao/place/success.coffee b/test/ciao/doc/success.coffee similarity index 72% rename from test/ciao/place/success.coffee rename to test/ciao/doc/success.coffee index d4fdea2b..3818aca6 100644 --- a/test/ciao/place/success.coffee +++ b/test/ciao/doc/success.coffee @@ -1,6 +1,6 @@ -#> valid place query -path: '/place?id=geoname:4221195' +#> valid doc query +path: '/doc?id=geoname:4221195' #? 200 ok response.statusCode.should.equal 200 @@ -13,4 +13,4 @@ json.date.should.be.within now-5000, now+5000 #? valid geojson json.type.should.equal 'FeatureCollection' -json.features.should.be.instanceof Array +json.features.should.be.instanceof Array \ No newline at end of file diff --git a/test/unit/controller/place.js b/test/unit/controller/doc.js similarity index 97% rename from test/unit/controller/place.js rename to test/unit/controller/doc.js index 9fe9115a..0bab18f2 100644 --- a/test/unit/controller/place.js +++ b/test/unit/controller/doc.js @@ -1,4 +1,5 @@ -var setup = require('../../../controller/place'), + +var setup = require('../../../controller/doc'), mockBackend = require('../mock/backend'); module.exports.tests = {}; @@ -14,7 +15,7 @@ module.exports.tests.interface = function(test, common) { // functionally test controller (backend success) module.exports.tests.functional_success = function(test, common) { - // expected geojson features for 'client/place/ok/1' fixture + // expected geojson features for 'client/doc/ok/1' fixture var expected = [{ type: 'Feature', geometry: { @@ -92,7 +93,7 @@ module.exports.tests.functional_success = function(test, common) { text: 'test name2, city2, state2' } }]; - + test('functional success (with details)', function(t) { var backend = mockBackend( 'client/mget/ok/1', function( cmd ){ t.deepEqual(cmd, { body: { docs: [ { _id: 123, _index: 'pelias', _type: 'a' } ] } }, 'correct backend command'); @@ -140,4 +141,4 @@ module.exports.all = function (tape, common) { for( var testCase in module.exports.tests ){ module.exports.tests[testCase](test, common); } -}; +}; \ No newline at end of file diff --git a/test/unit/run.js b/test/unit/run.js index 96e146cf..75051927 100644 --- a/test/unit/run.js +++ b/test/unit/run.js @@ -4,14 +4,14 @@ var common = {}; var tests = [ require('./controller/index'), - require('./controller/place'), + require('./controller/doc'), require('./controller/search'), require('./service/mget'), require('./service/search'), require('./sanitiser/suggest'), require('./sanitiser/search'), require('./sanitiser/reverse'), - require('./sanitiser/place'), + require('./sanitiser/doc'), require('./sanitiser/coarse'), require('./query/indeces'), require('./query/sort'), @@ -25,4 +25,4 @@ var tests = [ tests.map(function(t) { t.all(tape, common); -}); +}); \ No newline at end of file diff --git a/test/unit/sanitiser/place.js b/test/unit/sanitiser/doc.js similarity index 96% rename from test/unit/sanitiser/place.js rename to test/unit/sanitiser/doc.js index 03456765..c44f8808 100644 --- a/test/unit/sanitiser/place.js +++ b/test/unit/sanitiser/doc.js @@ -1,13 +1,13 @@ -var place = require('../../../sanitiser/place'), - _sanitize = place.sanitize, - middleware = place.middleware, +var doc = require('../../../sanitiser/doc'), + _sanitize = doc.sanitize, + middleware = doc.middleware, indeces = require('../../../query/indeces'), delimiter = ':', defaultLengthError = function(input) { return 'invalid param \''+ input + '\': text length, must be >0'; }, defaultFormatError = 'invalid: must be of the format type:id for ex: \'geoname:4163334\'', defaultError = 'invalid param \'id\': text length, must be >0', - defaultMissingTypeError = function(input) { + defaultMissingTypeError = function(input) { var type = input.split(delimiter)[0]; return type + ' is invalid. It must be one of these values - [' + indeces.join(', ') + ']'; }, defaultClean = { ids: [ { id: '123', type: 'geoname' } ], details: true }, @@ -111,7 +111,7 @@ module.exports.tests.sanitize_details = function(test, common) { t.equal(clean.details, false, 'default details set (to false)'); t.end(); }); - }); + }); }); var valid_values = ['true', true, 1]; @@ -121,7 +121,7 @@ module.exports.tests.sanitize_details = function(test, common) { t.equal(clean.details, true, 'details set to true'); t.end(); }); - }); + }); }); var valid_false_values = ['false', false, 0]; @@ -131,7 +131,7 @@ module.exports.tests.sanitize_details = function(test, common) { t.equal(clean.details, false, 'details set to false'); t.end(); }); - }); + }); }); test('test default behavior', function(t) { @@ -190,10 +190,10 @@ module.exports.tests.middleware_success = function(test, common) { module.exports.all = function (tape, common) { function test(name, testFunction) { - return tape('SANTIZE /place ' + name, testFunction); + return tape('SANTIZE /doc ' + name, testFunction); } for( var testCase in module.exports.tests ){ module.exports.tests[testCase](test, common); } -}; +}; \ No newline at end of file