[#209,backend/memory] Code refactored (less side-effects) to be moved from backends

This commit is contained in:
Krzysztof Trzewiczek
2012-08-08 21:37:11 +02:00
parent e701f11e29
commit b39f858f69

View File

@@ -90,30 +90,43 @@ this.recline.Backend.Memory = this.recline.Backend.Memory || {};
// in place filtering // in place filtering
this._applyFilters = function(results, queryObj) { this._applyFilters = function(results, queryObj) {
_.each(queryObj.filters, function(filter) { var filters = queryObj.filters;
switch (filter.type) { // register filters
case 'term': var filterFunctions = {
results = _.filter(results, function(doc) { term : term,
return (doc[filter.field] === filter.term); range : range,
geo_distance : geo_distance
};
// filter records
return _.filter(results, function (record) {
var passes = _.map(filters, function (filter) {
return filterFunctions[filter.type](record, filter);
}); });
break;
case 'range': // return only these records that pass all filters
results = _.filter(results, function (doc) { return _.all(passes, _.identity);
});
// filters definitions
function term(record, filter) {
return (record[filter.field] === filter.term);
}
function range(record, filter) {
// TODO handle different data types correctly // TODO handle different data types correctly
var number = !isNaN(parseFloat(filter.start, 10)); var number = !isNaN(parseFloat(filter.start, 10));
var start = number ? parseFloat(filter.start, 10) : filter.start; var start = number ? parseFloat(filter.start, 10) : filter.start;
var stop = number ? parseFloat(filter.stop, 10) : filter.stop; var stop = number ? parseFloat(filter.stop, 10) : filter.stop;
var value = number ? parseFloat(doc[filter.field]) : doc[filter.field]; var value = number ? parseFloat(record[filter.field]) : record[filter.field];
return (value >= start && value <= stop); return (value >= start && value <= stop);
});
break;
case 'geo_distance':
// TODO code here
break;
} }
});
return results; function geo_distance() {
// TODO code here
}
}; };
// we OR across fields but AND across terms in query string // we OR across fields but AND across terms in query string