From 9c40912a89622b3c108439ccefea97d07bf7ddcf Mon Sep 17 00:00:00 2001 From: Typicode Date: Sun, 29 Nov 2015 19:32:15 +0100 Subject: [PATCH] Add "not equal" operator --- CHANGELOG.md | 1 + README.md | 10 ++++++++-- src/server/router/plural.js | 13 ++++++++++--- test/server/plural.js | 12 +++++++++++- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7c83b8..39f3205 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * CLI option `-q/--quied` * Nested route `POST /posts/1/comments` +* Not equal operator `GET /posts?id_ne=1` ## [0.8.2][2015-10-15] diff --git a/README.md b/README.md index c9524fa..b0ac89e 100644 --- a/README.md +++ b/README.md @@ -98,14 +98,20 @@ GET /posts?_sort=views&_order=DESC GET /posts/1/comments?_sort=votes&_order=ASC ``` -### Range +### Operators -Add `_gte` or `_lte` +Add `_gte` or `_lte` for getting a range ``` GET /posts?views_gte=10&views_lte=20 ``` +Add `_ne` to exclude a value + +``` +GET /posts?id_ne=1 +``` + ### Full-text search Add `q` diff --git a/src/server/router/plural.js b/src/server/router/plural.js index f371d2e..4b11db6 100644 --- a/src/server/router/plural.js +++ b/src/server/router/plural.js @@ -73,7 +73,8 @@ module.exports = function (db, name) { query === 'callback' || query === '_' || query.indexOf('_lte') !== -1 || - query.indexOf('_gte') !== -1 + query.indexOf('_gte') !== -1 || + query.indexOf('_ne') !== -1 ) return } delete req.query[query] @@ -106,17 +107,23 @@ module.exports = function (db, name) { return arr .map(utils.toNative) .map(function (value) { + var isDifferent = key.indexOf('_ne') !== -1 var isRange = key.indexOf('_lte') !== -1 || key.indexOf('_gte') !== -1 + var path = key.replace(/(_lte|_gte|_ne)$/, '') + var elementValue + if (isRange) { - var path = key.replace(/(_lte|_gte)$/, '') var isLowerThan = key.indexOf('_gte') !== -1 - var elementValue = _.get(element, path) + elementValue = _.get(element, path) if (isLowerThan) { return value <= elementValue } else { return value >= elementValue } + } else if (isDifferent) { + elementValue = _.get(element, path) + return value !== elementValue } else { return _.matchesProperty(key, value)(element) } diff --git a/test/server/plural.js b/test/server/plural.js index a6f8d88..f16dc45 100644 --- a/test/server/plural.js +++ b/test/server/plural.js @@ -224,7 +224,7 @@ describe('Server', function () { }) }) - describe('GET /:resource?attr>=&attr<=', function () { + describe('GET /:resource?attr_gte=&attr_lte=', function () { it('should respond with a limited array', function (done) { request(server) .get('/comments?id_gte=2&id_lte=3') @@ -234,6 +234,16 @@ describe('Server', function () { }) }) + describe('GET /:resource?attr_ne=', function () { + it('should respond with a limited array', function (done) { + request(server) + .get('/comments?id_ne=1') + .expect('Content-Type', /json/) + .expect(db.comments.slice(1)) + .expect(200, done) + }) + }) + describe('GET /:parent/:parentId/:resource', function () { it('should respond with json and corresponding nested resources', function (done) { request(server)