From 1668b35fd5235dbb2e69c760cb02c0cac78c39d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Jakubowski?= Date: Wed, 20 May 2015 08:39:11 +0200 Subject: [PATCH] filtering context in controller --- build.sbt | 8 ++--- .../filters/json/FilterController.scala | 29 ++++++++++--------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/build.sbt b/build.sbt index 2a34b15..cc90220 100644 --- a/build.sbt +++ b/build.sbt @@ -2,9 +2,9 @@ organization := "org.virtuslab" name := "beholder" -version := "0.2.6" +version := "0.2.7" -scalaVersion := "2.11.5" +scalaVersion := "2.11.6" resolvers += Resolver.typesafeRepo("releases") @@ -15,9 +15,9 @@ resolvers += Resolver.sonatypeRepo("snapshots") libraryDependencies ++= Seq( "com.typesafe.slick" %% "slick" % "2.1.0", "com.typesafe.play" %% "play-slick" % "0.8.1", - "org.virtuslab" %% "unicorn" % "0.6.2", + "org.virtuslab" %% "unicorn" % "0.6.3", "org.scalatest" %% "scalatest" % "2.2.3" % "test", - "com.typesafe.play" %% "play-test" % "2.3.8" % "test", + "com.typesafe.play" %% "play-test" % "2.3.9" % "test", "com.h2database" % "h2" % "1.4.184" % "test" ) diff --git a/src/main/scala/org/virtuslab/beholder/filters/json/FilterController.scala b/src/main/scala/org/virtuslab/beholder/filters/json/FilterController.scala index 1889cf8..e4e112e 100644 --- a/src/main/scala/org/virtuslab/beholder/filters/json/FilterController.scala +++ b/src/main/scala/org/virtuslab/beholder/filters/json/FilterController.scala @@ -7,24 +7,27 @@ import play.api.mvc._ abstract class FilterController[Entity <: Product](filter: FilterAPI[Entity, JsonFormatter[Entity]]) extends Controller { - protected def inSession(body: Request[AnyContent] => Session => Option[JsValue]): EssentialAction + type FilterContext - final def filterDefinition = inSession { request => - _ => - Option(filter.formatter.jsonDefinition) + protected def getSession(t: FilterContext): Session + + protected def getRequest(t: FilterContext): Request[JsValue] + + protected def inFilterContext(body: FilterContext => Option[JsValue]): EssentialAction + + final def filterDefinition = inFilterContext { _: FilterContext => + Option(filter.formatter.jsonDefinition) } //for filter modification such us setting default parameters etc. protected def mapFilterData(data: FilterDefinition) = data final def doFilter: EssentialAction = - inSession { - request => - implicit session => - for { - json <- request.body.asJson - filterDefinition <- filter.formatter.filterDefinition(json) - data = filter.filterWithTotalEntitiesNumber(mapFilterData(filterDefinition)) - } yield filter.formatter.results(filterDefinition, data) + inFilterContext { + context: FilterContext => + for { + filterDefinition <- filter.formatter.filterDefinition(getRequest(context).body) + data = filter.filterWithTotalEntitiesNumber(mapFilterData(filterDefinition))(getSession(context)) + } yield filter.formatter.results(filterDefinition, data) } -} +} \ No newline at end of file