You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

51 lines
1.7 KiB

const _ = require('lodash');
const Debug = require('../../helper/debug');
const debugLog = new Debug('controller:predicates:has_results_at_layers');
const stackTraceLine = require('../../helper/stackTraceLine');
module.exports = {
// returns a function that returns true if any result.layer is in any of the
// supplied layers using array intersection
// example usage: determining if the response contains only admin results
any(layers) {
return (request, response) => {
const has_results_at_any_layer = !_.isEmpty(
_.intersection(
// convert layers to an array if it isn't already one
_.castArray(layers),
// pull all the layer properties into an array
_.map(response.data, _.property('layer'))
));
debugLog.push(request, () => ({
reply: {[layers]: has_results_at_any_layer},
stack_trace: stackTraceLine()
}));
return has_results_at_any_layer;
};
},
// returns a function that returns true IFF the layers in all the results are
// in the supplied layers
// example usage: determining if all results are either neighbourhoods or localities
all(layers) {
return (request, response) => {
const has_results_at_all_layers = _.isEmpty(
_.difference(
// get all layers of all the results into an array
_.map(response.data, _.property('layer')),
// convert layers to an array if it isn't already one
_.castArray(layers)
)
);
debugLog.push(request, () => ({
reply: {[layers]: has_results_at_all_layers},
stack_trace: stackTraceLine()
}));
return has_results_at_all_layers;
};
}
};