diff --git a/package.json b/package.json index 1e0b3fb..e93b931 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,13 @@ "errorhandler": "^1.2.0", "express": "^4.9.5", "got": "^1.2.2", + "lodash": "^3.9.1", "lowdb": "^0.7.1", "method-override": "^2.1.2", "morgan": "^1.3.1", "node-uuid": "^1.4.2", "pluralize": "^1.1.2", - "underscore": "^1.5.2", + "underscore": "^1.8.3", "underscore-db": "^0.8.0", "update-notifier": "^0.2.2", "yargs": "^1.3.1" diff --git a/src/router.js b/src/router.js index 7e7c924..70c409b 100644 --- a/src/router.js +++ b/src/router.js @@ -78,7 +78,7 @@ module.exports = function (source) { array = db(req.params.resource).filter(function (obj) { for (var key in obj) { var value = obj[key] - if (_.isString(value) && value.toLowerCase().indexOf(q) !== -1) { + if (utils.deepQuery(value, q)) { return true } } @@ -101,7 +101,8 @@ module.exports = function (source) { filters[key] = utils.toNative(req.query[key]) } } - + console.log(filters) + console.log() // Filter if (_(filters).isEmpty()) { array = db(req.params.resource).value() diff --git a/src/utils.js b/src/utils.js index c196ee9..5021962 100644 --- a/src/utils.js +++ b/src/utils.js @@ -9,8 +9,8 @@ var pluralize = require('pluralize') function toNative (value) { if (typeof value === 'string') { if (value === '' - || value.trim() !== value - || (value.length > 1 && value[0] === '0')) { + || value.trim() !== value + || (value.length > 1 && value[0] === '0')) { return value } else if (value === 'true' || value === 'false') { return value === 'true' @@ -44,7 +44,7 @@ function createId (coll) { // Example: a comment that references a post that doesn't exist function getRemovable (db) { var removable = [] - + console.log(db) _(db).each(function (coll, collName) { _(coll).each(function (doc) { _(doc).each(function (value, key) { @@ -66,8 +66,29 @@ function getRemovable (db) { return removable } +function deepQuery (value, q) { + if (value && q) { + if (_.isArray(value)) { + for (var i = 0; i < value.length; i++) { + if (deepQuery(value[i], q)) { + return true + } + } + } else if (_.isObject(value) && !_.isArray(value)) { + for (var k in value) { + if (deepQuery(value[k], q)) { + return true + } + } + } else if (value.toString().toLowerCase().indexOf(q) !== -1) { + return true + } + } +} + module.exports = { toNative: toNative, createId: createId, - getRemovable: getRemovable + getRemovable: getRemovable, + deepQuery: deepQuery }