aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/withinRange.js18
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/withinRange.js b/lib/withinRange.js
index 3408a5a..7b6aa18 100644
--- a/lib/withinRange.js
+++ b/lib/withinRange.js
@@ -1,10 +1,12 @@
/**
* @param {Object} feature
* @param {Object} rangeFeature
+ * @param {Object} options
+ * @param {boolean} options.matchParity - if the parity of the number must match the range to be considered within (eg. if true, then 2 would not be within 1-3 but would be within 2-4 or within 0-4)
*
* @returns {boolean} True if addr:housenumber of feature is within the range of addr:housenumber rangeFeature and all other addr:* attributes match
*/
-module.exports = (feature, rangeFeature) => {
+module.exports = (feature, rangeFeature, options) => {
const regexp = /^(?<pre>\D*)(?<num>\d*)(?<suf>\D*)$/
if (
@@ -33,7 +35,19 @@ module.exports = (feature, rangeFeature) => {
Number(i.num) >= Number(from.num) && Number(i.num) <= Number(to.num)
) {
// feature within featureRange (ignore prefix/suffix)
- return true
+ if (options && options.matchParity) {
+ // if parity matches (ie. both number and from/to are even, or both are odd, but not one even and one odd)
+ if (
+ ((Number(i.num) % 2) === (Number(from.num) % 2)) &&
+ ((Number(i.num) % 2) === (Number(to.num) % 2))
+ ) {
+ return true
+ } else {
+ return false
+ }
+ } else {
+ return true
+ }
} else {
return false
}