Added _limit param. Example usage: _start=2&_limit=3 alternative to _start=2&_end=5.

This commit is contained in:
Binali Rustamov
2015-04-28 15:16:14 +06:00
parent 23b0faf892
commit 34b95e2bac
4 changed files with 104 additions and 53 deletions

View File

@ -58,11 +58,12 @@ module.exports = function(source) {
var _end = req.query._end var _end = req.query._end
var _sort = req.query._sort var _sort = req.query._sort
var _order = req.query._order var _order = req.query._order
var _limit = req.query._limit
delete req.query._start delete req.query._start
delete req.query._end delete req.query._end
delete req.query._sort delete req.query._sort
delete req.query._order delete req.query._order
delete req.query._limit
if (req.query.q) { if (req.query.q) {
@ -117,13 +118,13 @@ module.exports = function(source) {
} }
// Slice result // Slice result
if (_end) { _start = _start || 0
res.setHeader('X-Total-Count', array.length) res.setHeader('X-Total-Count', array.length)
res.setHeader('Access-Control-Expose-Headers', 'X-Total-Count') res.setHeader('Access-Control-Expose-Headers', 'X-Total-Count')
if (_end) {
_start = _start || 0
array = array.slice(_start, _end) array = array.slice(_start, _end)
} else if (_limit) {
array = utils.limitArray(array, _start, _limit)
} }
res.jsonp(array) res.jsonp(array)

View File

@ -66,8 +66,15 @@ function getRemovable(db) {
return removable return removable
} }
//Returns limited array
function limitArray(array, start, limit) {
var end = parseInt(start) + parseInt(limit)
return array.slice(start, end)
}
module.exports = { module.exports = {
toNative: toNative, toNative: toNative,
createId: createId, createId: createId,
getRemovable: getRemovable getRemovable: getRemovable,
limitArray: limitArray
} }

View File

@ -1,7 +1,7 @@
var request = require('supertest') var request = require('supertest')
var assert = require('assert') var assert = require('assert')
var jsonServer = require('../src/') var jsonServer = require('../src/')
var utils = require('../src/utils')
describe('Server', function() { describe('Server', function() {
var server var server
@ -28,6 +28,12 @@ describe('Server', function() {
{id: 3, published: false, postId: 2}, {id: 3, published: false, postId: 2},
{id: 4, published: false, postId: 2}, {id: 4, published: false, postId: 2},
{id: 5, published: false, postId: 2}, {id: 5, published: false, postId: 2},
{id: 6, published: false, postId: 2},
{id: 7, published: false, postId: 2},
{id: 8, published: false, postId: 2},
{id: 9, published: false, postId: 2},
{id: 10, published: false, postId: 2},
{id: 11, published: false, postId: 2}
] ]
db.refs = [ db.refs = [
@ -147,6 +153,18 @@ describe('Server', function() {
}) })
}) })
describe('GET /:resource?_start=&_limit=', function() {
it('should respond with a limited array', function(done) {
request(server)
.get('/comments?_start=5&_limit=3')
.expect('Content-Type', /json/)
.expect('x-total-count', db.comments.length.toString())
.expect('Access-Control-Expose-Headers', 'X-Total-Count')
.expect(utils.limitArray(db.comments, 5, 3))
.expect(200, done)
})
})
describe('GET /:parent/:parentId/:resource', function() { describe('GET /:parent/:parentId/:resource', function() {
it('should respond with json and corresponding nested resources', function(done) { it('should respond with json and corresponding nested resources', function(done) {
request(server) request(server)
@ -154,7 +172,8 @@ describe('Server', function() {
.expect('Content-Type', /json/) .expect('Content-Type', /json/)
.expect([ .expect([
db.comments[0], db.comments[0],
db.comments[1] db.comments[1],
]) ])
.expect(200, done) .expect(200, done)
}) })
@ -279,7 +298,7 @@ describe('Server', function() {
.end(function(err, res) { .end(function(err, res) {
if (err) return done(err) if (err) return done(err)
assert.equal(db.posts.length, 1) assert.equal(db.posts.length, 1)
assert.equal(db.comments.length, 3) assert.equal(db.comments.length, 9)
done() done()
}) })
}) })

View File

@ -46,4 +46,28 @@ describe('utils', function() {
}) })
}) })
describe('limitArray', function() {
it('should return limited array', function() {
var testArray = [
{id: 2, postId: 2},
{id: 3, postId: 4},
{id: 4, postId: 6},
{id: 5, postId: 8},
{id: 6, postId: 9},
{id: 7, postId: 10},
{id: 8, postId: 11},
{id: 9, postId: 12},
{id: 10, postId: 13},
{id: 11, postId: 14},
{id: 12, postId: 15},
{id: 13, postId: 16},
{id: 14, postId: 17},
{id: 15, postId: 18},
{id: 16, postId: 19}
]
assert.deepEqual(utils.limitArray(testArray, 3, 3), testArray.slice(3, 6))
assert.deepEqual(utils.limitArray(testArray, 5, 3), testArray.slice(5, 8))
})
})
}) })