aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@driver.xyz>2017-08-03 14:22:46 -0700
committerJakob Odersky <jakob@driver.xyz>2017-08-16 19:26:10 -0700
commiteb5e95e95714ce23705a0de0f4dd525a8efeafe2 (patch)
treededdb5928cedbf3383bedb5115992e8b81e51847
parent985ee69beed836b97f3476306736d3f15ce37e1c (diff)
downloadrest-query-eb5e95e95714ce23705a0de0f4dd525a8efeafe2.tar.gz
rest-query-eb5e95e95714ce23705a0de0f4dd525a8efeafe2.tar.bz2
rest-query-eb5e95e95714ce23705a0de0f4dd525a8efeafe2.zip
Remove play requirements from parsers
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala14
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/ListRequestParser.scala20
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/PaginationParser.scala60
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/ParseQueryArgException.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala10
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala12
6 files changed, 17 insertions, 101 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala
index 147102b..f23b1b0 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala
@@ -1,8 +1,7 @@
-package xyz.driver.server.parsers
+package xyz.driver.pdsuicommon.parsers
-import play.api.libs.json._
-import play.api.routing.sird._
-import xyz.driver.pdsuicommon.utils.WritesUtils
+//import play.api.libs.json._
+//import xyz.driver.pdsuicommon.utils.WritesUtils
import scala.util.{Failure, Success, Try}
@@ -12,14 +11,15 @@ class Dimensions(private val xs: Set[String] = Set.empty) {
object DimensionsParser {
+ /*
private class DimensionsWrapper[T](dimensions: Dimensions)(implicit orig: Writes[T]) extends Writes[T] {
private val filteredWrites = WritesUtils.filterKeys[T](dimensions.contains)
override def writes(o: T): JsValue = filteredWrites.writes(o)
}
+ */
- def tryParse(queryString: QueryString): Try[Dimensions] = {
- val rawDimensions = queryString.getOrElse("dimensions", Seq.empty)
- rawDimensions match {
+ def tryParse(query: Seq[(String, String)]): Try[Dimensions] = {
+ query.collect{ case ("dimensions", value) => value } match {
case Nil => Success(new Dimensions())
case x +: Nil =>
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/ListRequestParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/ListRequestParser.scala
deleted file mode 100644
index 617a77e..0000000
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/ListRequestParser.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-package xyz.driver.server.parsers
-
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import play.api.mvc._
-
-import scala.util.Try
-
-final case class ListRequestParameters(filter: SearchFilterExpr, sorting: Sorting, pagination: Pagination)
-
-class ListRequestParser(validSortingFields: Set[String]) {
-
- def tryParse(request: Request[AnyContent]): Try[ListRequestParameters] = {
- for {
- queryFilters <- SearchFilterParser.parse(request.queryString)
- sorting <- SortingParser.parse(validSortingFields, request.queryString)
- pagination <- PaginationParser.parse(request.queryString)
- } yield ListRequestParameters(queryFilters, sorting, pagination)
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/PaginationParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/PaginationParser.scala
deleted file mode 100644
index a6a7fae..0000000
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/PaginationParser.scala
+++ /dev/null
@@ -1,60 +0,0 @@
-package xyz.driver.server.parsers
-
-import xyz.driver.pdsuicommon.db.Pagination
-import xyz.driver.server.parsers.errors.ParseQueryArgException
-import play.api.data.validation._
-import play.api.routing.sird.QueryString
-import xyz.driver.pdsuicommon.validation.AdditionalConstraints
-
-import scala.util.Try
-
-object PaginationParser {
-
- private val oneQueryArgConstraint: Constraint[Seq[String]] = {
- Constraint("query.oneArg") {
- case Nil => Valid
- case x +: Nil => Valid
- case xs =>
- Invalid(new ValidationError(Seq(s"must be one argument, but there are multiple: '${xs.mkString(", ")}'")))
- }
- }
-
- private val pageSizeCheckConstraint: Constraint[Seq[String]] = {
- Constraint("pagination.pageSize") { args =>
- oneQueryArgConstraint(args) match {
- case x: Invalid => x
- case Valid => AdditionalConstraints.positivePrintedNumber(args.head)
- }
- }
- }
-
- private val pageNumberCheckConstraint: Constraint[Seq[String]] = {
- Constraint("pagination.pageNumber") { args =>
- oneQueryArgConstraint(args) match {
- case x: Invalid => x
- case Valid => AdditionalConstraints.positivePrintedNumber(args.head)
- }
- }
- }
-
- def parse(queryString: QueryString): Try[Pagination] = Try {
- val rawPageSizes = queryString.getOrElse("pageSize", Seq(Pagination.Default.pageSize.toString))
- val rawPageNumbers = queryString.getOrElse("pageNumber", Seq(Pagination.Default.pageNumber.toString))
-
- val validation = Seq(
- "pageSize" -> pageSizeCheckConstraint(rawPageSizes),
- "pageNumber" -> pageNumberCheckConstraint(rawPageNumbers)
- )
-
- val validationErrors = validation.collect {
- case (fieldName, e: Invalid) => (fieldName, e.errors.mkString("; "))
- }
-
- if (validationErrors.isEmpty) {
- Pagination(Integer.parseInt(rawPageSizes.head), Integer.parseInt(rawPageNumbers.head))
- } else {
- throw new ParseQueryArgException(validationErrors: _*)
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/ParseQueryArgException.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/ParseQueryArgException.scala
index c3ab020..64b3d2e 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/ParseQueryArgException.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/ParseQueryArgException.scala
@@ -1,3 +1,3 @@
-package xyz.driver.server.parsers.errors
+package xyz.driver.pdsuicommon.parsers
class ParseQueryArgException(val errors: (String, String)*) extends Exception(errors.mkString(","))
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala
index c6ea2e1..58b80ce 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala
@@ -1,11 +1,9 @@
-package xyz.driver.server.parsers
+package xyz.driver.pdsuicommon.parsers
-import xyz.driver.server.parsers.errors.ParseQueryArgException
import xyz.driver.pdsuicommon.utils.Implicits.{toCharOps, toStringOps}
import fastparse.all._
import fastparse.core.Parsed
import fastparse.parsers.Intrinsics.CharPred
-import play.api.routing.sird._
import xyz.driver.pdsuicommon.db.{SearchFilterBinaryOperation, SearchFilterExpr, SearchFilterNAryOperation}
import scala.util.Try
@@ -110,11 +108,11 @@ object SearchFilterParser {
private val atomParser: Parser[SearchFilterExpr.Atom] = P(binaryAtomParser | nAryAtomParser)
- def parse(queryString: QueryString): Try[SearchFilterExpr] = Try {
- queryString.getOrElse("filters", Seq.empty) match {
+ def parse(query: Seq[(String, String)]): Try[SearchFilterExpr] = Try {
+ query.toList.collect { case ("filters", value) => value } match {
case Nil => SearchFilterExpr.Empty
- case head +: Nil =>
+ case head :: Nil =>
atomParser.parse(head) match {
case Parsed.Success(x, _) => x
case e: Parsed.Failure => throw new ParseQueryArgException("filters" -> formatFailure(1, e))
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala
index c042211..375dee2 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala
@@ -1,10 +1,8 @@
-package xyz.driver.server.parsers
+package xyz.driver.pdsuicommon.parsers
-import xyz.driver.server.parsers.errors.ParseQueryArgException
import xyz.driver.pdsuicommon.db.{Sorting, SortingOrder}
import fastparse.all._
import fastparse.core.Parsed
-import play.api.routing.sird._
import scala.util.Try
@@ -32,11 +30,11 @@ object SortingParser {
}
}
- def parse(validDimensions: Set[String], queryString: QueryString): Try[Sorting] = Try {
- queryString.getOrElse("sort", Seq.empty) match {
+ def parse(validDimensions: Set[String], query: Seq[(String, String)]): Try[Sorting] = Try {
+ query.toList.collect { case ("sort", value) => value } match {
case Nil => Sorting.Sequential(Seq.empty)
- case rawSorting +: Nil =>
+ case rawSorting :: Nil =>
val parser = sequentialSortingParser(validDimensions.toSeq)
parser.parse(rawSorting) match {
case Parsed.Success(x, _) => x
@@ -44,7 +42,7 @@ object SortingParser {
throw new ParseQueryArgException("sort" -> formatFailure(e))
}
- case xs => throw new ParseQueryArgException("sort" -> "multiple sections are not allowed")
+ case _ => throw new ParseQueryArgException("sort" -> "multiple sections are not allowed")
}
}