Skip to content

Commit 56f87a0

Browse files
committed
Merge pull request #27 from manuquentin/add_field_sorting
[RFR] Allows to sort on a field
2 parents 4428a2e + 05bf46e commit 56f87a0

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

src/routes.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,13 @@ routes.list = function(req, res, next) {
2727
// parameters
2828
var _start = req.query._start
2929
var _end = req.query._end
30+
var _sort = req.query._sort
31+
var _sortDir = req.query._sortDir
3032

3133
delete req.query._start
3234
delete req.query._end
35+
delete req.query._sort
36+
delete req.query._sortDir
3337

3438
if (req.query.q) {
3539

@@ -68,6 +72,18 @@ routes.list = function(req, res, next) {
6872
}
6973
}
7074

75+
if(_sort) {
76+
_sortDir = _sortDir || 'ASC'
77+
78+
array = _.sortBy(array, function(element) {
79+
return element[_sort];
80+
})
81+
82+
if (_sortDir === 'DESC') {
83+
array.reverse();
84+
}
85+
}
86+
7187
// Slice result
7288
if (_end) {
7389
res.setHeader('X-Total-Count', array.length)

test/server.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,32 @@ describe('Server', function() {
9191
})
9292
})
9393

94+
describe('GET /:resource?sort=', function() {
95+
it('should respond with json and sort on a field', function(done) {
96+
request(server)
97+
.get('/tags?_sort=body')
98+
.expect('Content-Type', /json/)
99+
.expect([low.db.tags[1], low.db.tags[0], low.db.tags[2]])
100+
.expect(200, done)
101+
})
102+
103+
it('should reverse sorting with sortDir=DESC', function(done) {
104+
request(server)
105+
.get('/tags?_sort=body&_sortDir=DESC')
106+
.expect('Content-Type', /json/)
107+
.expect([low.db.tags[2], low.db.tags[0], low.db.tags[1]])
108+
.expect(200, done)
109+
})
110+
111+
it('should sort on numerical field', function(done) {
112+
request(server)
113+
.get('/posts?_sort=id&_sortDir=DESC')
114+
.expect('Content-Type', /json/)
115+
.expect(low.db.posts.reverse())
116+
.expect(200, done)
117+
})
118+
})
119+
94120
describe('GET /:resource?_start=&_end=', function() {
95121
it('should respond with a sliced array', function(done) {
96122
request(server)

0 commit comments

Comments
 (0)