aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/com/drivergrp/core/module.scala
diff options
context:
space:
mode:
authorvlad <vlad@drivergrp.com>2016-07-16 04:09:40 -0400
committervlad <vlad@drivergrp.com>2016-07-16 04:09:40 -0400
commit482459a63433c281b7a576236111e6a86e4521c9 (patch)
tree7b445b56b5846bda368e1864ac43d8f860341077 /src/main/scala/com/drivergrp/core/module.scala
parent980deaf70e4e0ba906d0af534aebc839015f0581 (diff)
downloaddriver-core-482459a63433c281b7a576236111e6a86e4521c9.tar.gz
driver-core-482459a63433c281b7a576236111e6a86e4521c9.tar.bz2
driver-core-482459a63433c281b7a576236111e6a86e4521c9.zip
Default implementations for easier testing + Database implicits reorganized
Diffstat (limited to 'src/main/scala/com/drivergrp/core/module.scala')
-rw-r--r--src/main/scala/com/drivergrp/core/module.scala39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/main/scala/com/drivergrp/core/module.scala b/src/main/scala/com/drivergrp/core/module.scala
new file mode 100644
index 0000000..94dd6a3
--- /dev/null
+++ b/src/main/scala/com/drivergrp/core/module.scala
@@ -0,0 +1,39 @@
+package com.drivergrp.core
+
+import akka.http.scaladsl.server.{Route, RouteConcatenation}
+
+
+object module {
+ import scala.reflect.runtime.universe._
+
+ trait Module {
+ val name: String
+ def route: Route
+ def routeTypes: Seq[Type]
+
+ def activate(): Unit = {}
+ def deactivate(): Unit = {}
+ }
+
+ class SimpleModule(val name: String, val route: Route, routeType: Type) extends Module {
+ def routeTypes: Seq[Type] = Seq(routeType)
+ }
+
+ /**
+ * Module implementation which may be used to composed a few
+ *
+ * @param name more general name of the composite module,
+ * must be provided as there is no good way to automatically
+ * generalize the name from the composed modules' names
+ * @param modules modules to compose into a single one
+ */
+ class CompositeModule(val name: String, modules: Seq[Module])
+ extends Module with RouteConcatenation {
+
+ def route: Route = modules.map(_.route).reduce(_ ~ _)
+ def routeTypes = modules.flatMap(_.routeTypes)
+
+ override def activate() = modules.foreach(_.activate())
+ override def deactivate() = modules.reverse.foreach(_.deactivate())
+ }
+} \ No newline at end of file