mirror of
https://github.com/typicode/json-server.git
synced 2025-07-31 22:25:05 +08:00
Add _like operator, credit goes to @tony-kerz for the idea
This commit is contained in:
@ -1,5 +1,11 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## [0.8.4][2015-12-13]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
* Like operator `GET /posts?title_like=json` (accepts RegExp)
|
||||||
|
|
||||||
## [0.8.3][2015-11-25]
|
## [0.8.3][2015-11-25]
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
@ -112,6 +112,12 @@ Add `_ne` to exclude a value
|
|||||||
GET /posts?id_ne=1
|
GET /posts?id_ne=1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Add `_like` to filter using RegExp
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /posts?title_like=server
|
||||||
|
```
|
||||||
|
|
||||||
### Full-text search
|
### Full-text search
|
||||||
|
|
||||||
Add `q`
|
Add `q`
|
||||||
|
@ -35,7 +35,9 @@
|
|||||||
"supertest": "~0.8.1"
|
"supertest": "~0.8.1"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "NODE_ENV=test mocha -R spec test/**/*.js && standard",
|
"test": "npm run test:cli && npm run test:server && standard",
|
||||||
|
"test:cli": "NODE_ENV=test mocha -R spec test/cli/*.js",
|
||||||
|
"test:server": "NODE_ENV=test mocha -R spec test/server/*.js",
|
||||||
"start": "node bin",
|
"start": "node bin",
|
||||||
"prepush": "npm t"
|
"prepush": "npm t"
|
||||||
},
|
},
|
||||||
|
@ -74,7 +74,8 @@ module.exports = function (db, name) {
|
|||||||
query === '_' ||
|
query === '_' ||
|
||||||
query.indexOf('_lte') !== -1 ||
|
query.indexOf('_lte') !== -1 ||
|
||||||
query.indexOf('_gte') !== -1 ||
|
query.indexOf('_gte') !== -1 ||
|
||||||
query.indexOf('_ne') !== -1
|
query.indexOf('_ne') !== -1 ||
|
||||||
|
query.indexOf('_like') !== -1
|
||||||
) return
|
) return
|
||||||
}
|
}
|
||||||
delete req.query[query]
|
delete req.query[query]
|
||||||
@ -109,12 +110,12 @@ module.exports = function (db, name) {
|
|||||||
.map(function (value) {
|
.map(function (value) {
|
||||||
var isDifferent = key.indexOf('_ne') !== -1
|
var isDifferent = key.indexOf('_ne') !== -1
|
||||||
var isRange = key.indexOf('_lte') !== -1 || key.indexOf('_gte') !== -1
|
var isRange = key.indexOf('_lte') !== -1 || key.indexOf('_gte') !== -1
|
||||||
var path = key.replace(/(_lte|_gte|_ne)$/, '')
|
var isLike = key.indexOf('_like') !== -1
|
||||||
var elementValue
|
var path = key.replace(/(_lte|_gte|_ne|_like)$/, '')
|
||||||
|
var elementValue = _.get(element, path)
|
||||||
|
|
||||||
if (isRange) {
|
if (isRange) {
|
||||||
var isLowerThan = key.indexOf('_gte') !== -1
|
var isLowerThan = key.indexOf('_gte') !== -1
|
||||||
elementValue = _.get(element, path)
|
|
||||||
|
|
||||||
if (isLowerThan) {
|
if (isLowerThan) {
|
||||||
return value <= elementValue
|
return value <= elementValue
|
||||||
@ -122,8 +123,9 @@ module.exports = function (db, name) {
|
|||||||
return value >= elementValue
|
return value >= elementValue
|
||||||
}
|
}
|
||||||
} else if (isDifferent) {
|
} else if (isDifferent) {
|
||||||
elementValue = _.get(element, path)
|
|
||||||
return value !== elementValue
|
return value !== elementValue
|
||||||
|
} else if (isLike) {
|
||||||
|
return new RegExp(value).test(elementValue)
|
||||||
} else {
|
} else {
|
||||||
return _.matchesProperty(key, value)(element)
|
return _.matchesProperty(key, value)(element)
|
||||||
}
|
}
|
||||||
|
@ -244,6 +244,19 @@ describe('Server', function () {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('GET /:resource?attr_like=', function () {
|
||||||
|
it('should respond with an array that matches the like operator', function (done) {
|
||||||
|
request(server)
|
||||||
|
.get('/tags?body_like=hoto')
|
||||||
|
.expect('Content-Type', /json/)
|
||||||
|
.expect([
|
||||||
|
db.tags[1],
|
||||||
|
db.tags[2]
|
||||||
|
])
|
||||||
|
.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)
|
||||||
|
Reference in New Issue
Block a user