From fde743937c9af05bcaf8b959c54c89404f97bc22 Mon Sep 17 00:00:00 2001 From: Andrew Harvey Date: Thu, 1 Jul 2021 00:28:56 +1000 Subject: within range provide a drop reason and consider parity of number --- lib/withinRange.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'lib/withinRange.js') 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 = /^(?
\D*)(?\d*)(?\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
       }
-- 
cgit v1.2.3