From 8b2489858034e83e8834d4bb7fdaea880a0d3418 Mon Sep 17 00:00:00 2001 From: Mike Date: Thu, 9 Apr 2020 14:42:10 -0400 Subject: [PATCH] fix: cast to boolean --- lib/__tests__/comparison.test.js | 3 +++ lib/utils.js | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/lib/__tests__/comparison.test.js b/lib/__tests__/comparison.test.js index 40e9445..5c98c95 100644 --- a/lib/__tests__/comparison.test.js +++ b/lib/__tests__/comparison.test.js @@ -9,9 +9,11 @@ const exp = [ 'bestFriend.name=jon', 'colleague.age=*', '!colour', + 'new=true', ]; const stub = { + new: true, colour: null, foo: 'bar', age: 21, @@ -58,6 +60,7 @@ describe('Comparison', () => { { 'bestFriend.name': /jon/gi }, { 'colleague.age': { $exists: true } }, { 'colour': { $eq: null } }, + { 'new': true }, ], })); diff --git a/lib/utils.js b/lib/utils.js index 3fb8416..fc2799a 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -1,9 +1,12 @@ const moment = require('moment'); +const toBoolean = (v) => v === 'true'; + const validate = (v) => ({ alpha: () => new RegExp(/^[A-Z]+$/, 'gi').test(v), date: () => moment(v, moment.ISO_8601, true).isValid(), numeric: () => !Number.isNaN(parseFloat(v)), + boolean: () => toBoolean(v) || v === 'false', }); class ValidatorRunner { @@ -101,6 +104,7 @@ const cast = (v) => { const test = validate(v); if (test.date()) return v; if (test.numeric()) return parseFloat(v); + if (test.boolean()) return toBoolean(v); return new RegExp(v, 'i'); };