aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-10-11 16:37:31 -0700
committervlad <vlad@driver.xyz>2017-10-11 16:37:31 -0700
commit22b4cd7b924f27231ed92c950cee6abe8a3cd5c9 (patch)
tree60017603a192d9c5347d4d467e9e442ec3e15549
parent3375f1beeab7af9a6732d6fce8762c3a3038e1f3 (diff)
downloadrest-query-22b4cd7b924f27231ed92c950cee6abe8a3cd5c9.tar.gz
rest-query-22b4cd7b924f27231ed92c950cee6abe8a3cd5c9.tar.bz2
rest-query-22b4cd7b924f27231ed92c950cee6abe8a3cd5c9.zip
Support for boolean filters
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala7
-rw-r--r--src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala9
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(