diff options
author | vlad <vlad@drivergrp.com> | 2016-07-16 20:46:19 -0400 |
---|---|---|
committer | vlad <vlad@drivergrp.com> | 2016-07-16 20:46:19 -0400 |
commit | 79decc7012af5dea36f154c734b1caddc975924f (patch) | |
tree | 6916ca4482994b3299ad9c010b8d01848cbd3e8a /src | |
parent | c948b1f2c1c7a5246d5c1a7cba05e6e27a9d7b57 (diff) | |
download | driver-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
Diffstat (limited to 'src')
-rw-r--r-- | src/main/scala/com/drivergrp/core/app.scala | 7 | ||||
-rw-r--r-- | src/main/scala/com/drivergrp/core/rest.scala | 14 |
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) |