From 22b4cd7b924f27231ed92c950cee6abe8a3cd5c9 Mon Sep 17 00:00:00 2001 From: vlad Date: Wed, 11 Oct 2017 16:37:31 -0700 Subject: Support for boolean filters --- .../xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala | 7 +++++-- .../xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala | 9 ++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala index e46e11c..2b89831 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala @@ -104,9 +104,12 @@ object SearchFilterParser { private val longParser: Parser[Long] = P(CharIn('0' to '9').rep(min = 1).!.map(_.toLong)) + private val booleanParser: Parser[Boolean] = + P((IgnoreCase("true") | IgnoreCase("false")).!.map(_.toBoolean)) + private val binaryAtomParser: Parser[SearchFilterExpr.Atom.Binary] = P( dimensionParser ~ whitespaceParser ~ ( - (numericOperatorParser.! ~ whitespaceParser ~ (longParser | numberParser.!)) | + (numericOperatorParser.! ~ whitespaceParser ~ (longParser | booleanParser | numberParser.!)) | (commonOperatorParser.! ~ whitespaceParser ~ AnyChar.rep(min = 1).!) ) ~ End ).map { @@ -116,7 +119,7 @@ object SearchFilterParser { private val nAryAtomParser: Parser[SearchFilterExpr.Atom.NAry] = P( dimensionParser ~ whitespaceParser ~ ( naryOperatorParser ~ whitespaceParser ~ - (longParser.rep(min = 1, sep = ",") | nAryValueParser.!.rep(min = 1, sep = ",")) + (longParser.rep(min = 1, sep = ",") | booleanParser.rep(min = 1, sep = ",") | nAryValueParser.!.rep(min = 1, sep = ",")) ) ~ End ).map { case NAryAtomFromTuple(atom) => atom diff --git a/src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala b/src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala index 02243aa..ac5eec1 100644 --- a/src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala +++ b/src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala @@ -113,12 +113,19 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { } "actual recordId" - { - "should not be parsed with text values" in { + "should not be parsed with numeric values" in { val filter = SearchFilterParser.parse(Seq("filters" -> "recordId EQ 1")) assert(filter === Success(SearchFilterExpr.Atom.Binary(Dimension(None, "record_id"), Eq, Long.box(1)))) } } + "actual isVisible boolean" - { + "should not be parsed with boolean values" in { + val filter = SearchFilterParser.parse(Seq("filters" -> "isVisible EQ true")) + assert(filter === Success(SearchFilterExpr.Atom.Binary(Dimension(None, "is_visible"), Eq, Boolean.box(true)))) + } + } + "all operators" - { "should be parsed with numeric values" in check { val testQueryGen = queryGen( -- cgit v1.2.3