aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlad <vlad@drivergrp.com>2016-07-16 20:46:19 -0400
committervlad <vlad@drivergrp.com>2016-07-16 20:46:19 -0400
commit79decc7012af5dea36f154c734b1caddc975924f (patch)
tree6916ca4482994b3299ad9c010b8d01848cbd3e8a
parentc948b1f2c1c7a5246d5c1a7cba05e6e27a9d7b57 (diff)
downloaddriver-core-79decc7012af5dea36f154c734b1caddc975924f.tar.gz
driver-core-79decc7012af5dea36f154c734b1caddc975924f.tar.bz2
driver-core-79decc7012af5dea36f154c734b1caddc975924f.zip
Akka-http path extractors for Id and Name + Test double for app module
-rw-r--r--src/main/scala/com/drivergrp/core/app.scala7
-rw-r--r--src/main/scala/com/drivergrp/core/rest.scala14
2 files changed, 20 insertions, 1 deletions
diff --git a/src/main/scala/com/drivergrp/core/app.scala b/src/main/scala/com/drivergrp/core/app.scala
index 34a92e3..97e09b5 100644
--- a/src/main/scala/com/drivergrp/core/app.scala
+++ b/src/main/scala/com/drivergrp/core/app.scala
@@ -2,6 +2,7 @@ package com.drivergrp.core
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
+import akka.http.scaladsl.model.StatusCodes
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.RouteResult._
import akka.stream.ActorMaterializer
@@ -91,6 +92,12 @@ object app {
def deactivate(): Unit = {}
}
+ class EmptyModule extends Module {
+ val name = "Nothing"
+ def route: Route = complete(StatusCodes.OK)
+ def routeTypes = Seq.empty[Type]
+ }
+
class SimpleModule(val name: String, val route: Route, routeType: Type) extends Module {
def routeTypes: Seq[Type] = Seq(routeType)
}
diff --git a/src/main/scala/com/drivergrp/core/rest.scala b/src/main/scala/com/drivergrp/core/rest.scala
index 71aed94..d8f6e4f 100644
--- a/src/main/scala/com/drivergrp/core/rest.scala
+++ b/src/main/scala/com/drivergrp/core/rest.scala
@@ -2,7 +2,9 @@ package com.drivergrp.core
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
+import akka.http.scaladsl.model.Uri.Path
import akka.http.scaladsl.model.{HttpRequest, HttpResponse}
+import akka.http.scaladsl.server.PathMatcher.Matched
import akka.http.scaladsl.server.{Directive, _}
import akka.http.scaladsl.util.FastFuture._
import akka.stream.ActorMaterializer
@@ -68,7 +70,13 @@ object rest {
object basicFormats {
- implicit def idFormat[T] = new RootJsonFormat[Id[T]] {
+ def IdInPath[T]: PathMatcher1[Id[T]] =
+ PathMatcher("""[+-]?\d*""".r) flatMap { string ⇒
+ try Some(Id[T](string.toLong))
+ catch { case _: IllegalArgumentException ⇒ None }
+ }
+
+ def IdFormat[T] = new RootJsonFormat[Id[T]] {
def write(id: Id[T]) = JsNumber(id)
def read(value: JsValue) = value match {
@@ -77,6 +85,10 @@ object rest {
}
}
+ def NameInPath[T]: PathMatcher1[Name[T]] = new PathMatcher1[Name[T]] {
+ def apply(path: Path) = Matched(Path.Empty, Tuple1(Name[T](path.toString)))
+ }
+
implicit def nameFormat[T] = new RootJsonFormat[Name[T]] {
def write(name: Name[T]) = JsString(name)