diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6450084 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.npm diff --git a/lib/client.js b/lib/client.js index 3963ab8..79de745 100644 --- a/lib/client.js +++ b/lib/client.js @@ -30,6 +30,9 @@ SearchSource.prototype._loadData = function(query, options) { } function handleData(err, payload) { + if (!payload) { + return; + } if(err) { self.status.set({error: err}); throw err; @@ -128,11 +131,27 @@ SearchSource.prototype.getData = function(options, getCursor) { selector = {}; } + function pick(doc, field) { + if (_.isString(field)) field = field.split('.'); + if (!_.isArray(field)) return doc[field]; + var tmp = doc; + while (i = field.shift()) + tmp = tmp[i]; + return tmp; + }; + + function put(doc, field, value) { + if (_.isString(field)) field = field.split('.'); + if (!_.isArray(field)) doc[field] = value; + pick(doc, _.initial(field))[_.last(field)] = value; + }; + function transform(doc) { if(options.transform) { self.searchFields.forEach(function(field) { - if(self.currentQuery && doc[field]) { - doc[field] = options.transform(doc[field], regExp, field, self.currentQuery); + var property = pick(doc, field); + if(self.currentQuery && property) { + put(doc, field, options.transform(property, regExp, field, self.currentQuery)); } }); }