From 8241655178126d9b0a0cf8deba11ee2a060d9adb Mon Sep 17 00:00:00 2001 From: Emmanuel Quentin Date: Thu, 18 Sep 2014 09:58:03 +0200 Subject: [PATCH 1/2] Allows to sort on a field --- src/routes.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/routes.js b/src/routes.js index 87f323c..7c3941b 100644 --- a/src/routes.js +++ b/src/routes.js @@ -27,9 +27,13 @@ routes.list = function(req, res, next) { // parameters var _start = req.query._start var _end = req.query._end + var _sort = req.query._sort + var _sortDir = req.query._sortDir delete req.query._start delete req.query._end + delete req.query._sort + delete req.query._sortDir if (req.query.q) { @@ -68,6 +72,18 @@ routes.list = function(req, res, next) { } } + if(_sort) { + _sortDir = _sortDir || 'ASC' + + array = _.sortBy(array, function(element) { + return element[_sort]; + }) + + if (_sortDir === 'DESC') { + array.reverse(); + } + } + // Slice result if (_end) { res.setHeader('X-Total-Count', array.length) From 05bf46e501a6eee8cdf4e3baeffbd3424a2d6aa7 Mon Sep 17 00:00:00 2001 From: Emmanuel Quentin Date: Thu, 18 Sep 2014 11:22:44 +0200 Subject: [PATCH 2/2] Add sorting test --- test/server.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/server.js b/test/server.js index 68a1f16..8bcd946 100644 --- a/test/server.js +++ b/test/server.js @@ -91,6 +91,32 @@ describe('Server', function() { }) }) + describe('GET /:resource?sort=', function() { + it('should respond with json and sort on a field', function(done) { + request(server) + .get('/tags?_sort=body') + .expect('Content-Type', /json/) + .expect([low.db.tags[1], low.db.tags[0], low.db.tags[2]]) + .expect(200, done) + }) + + it('should reverse sorting with sortDir=DESC', function(done) { + request(server) + .get('/tags?_sort=body&_sortDir=DESC') + .expect('Content-Type', /json/) + .expect([low.db.tags[2], low.db.tags[0], low.db.tags[1]]) + .expect(200, done) + }) + + it('should sort on numerical field', function(done) { + request(server) + .get('/posts?_sort=id&_sortDir=DESC') + .expect('Content-Type', /json/) + .expect(low.db.posts.reverse()) + .expect(200, done) + }) + }) + describe('GET /:resource?_start=&_end=', function() { it('should respond with a sliced array', function(done) { request(server)