mirror of https://github.com/pelias/api.git
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
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; |
|
|
|
}; |
|
} |
|
|
|
};
|
|
|