[#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
break; };
case 'range':
results = _.filter(results, function (doc) {
// TODO handle different data types correctly
var number = !isNaN(parseFloat(filter.start, 10));
var start = number ? parseFloat(filter.start, 10) : filter.start;
var stop = number ? parseFloat(filter.stop, 10) : filter.stop;
var value = number ? parseFloat(doc[filter.field]) : doc[filter.field];
return (value >= start && value <= stop); // filter records
}); return _.filter(results, function (record) {
break; var passes = _.map(filters, function (filter) {
case 'geo_distance': return filterFunctions[filter.type](record, filter);
// TODO code here });
break;
} // return only these records that pass all filters
return _.all(passes, _.identity);
}); });
return results;
// filters definitions
function term(record, filter) {
return (record[filter.field] === filter.term);
}
function range(record, filter) {
// TODO handle different data types correctly
var number = !isNaN(parseFloat(filter.start, 10));
var start = number ? parseFloat(filter.start, 10) : filter.start;
var stop = number ? parseFloat(filter.stop, 10) : filter.stop;
var value = number ? parseFloat(record[filter.field]) : record[filter.field];
return (value >= start && value <= stop);
}
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