|
|
|
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;
|
|
|
|
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|