summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-02-12 14:07:48 -0600
committerJesse Luehrs <doy@tozt.net>2013-02-12 14:07:48 -0600
commit9074a601970a626a446b5fefed5b30db39092ff6 (patch)
tree232faeff8ab55e25d2b8d869b878d03ce101f11a /src
downloadscala-di-test-9074a601970a626a446b5fefed5b30db39092ff6.tar.gz
scala-di-test-9074a601970a626a446b5fefed5b30db39092ff6.zip
initial sketch of cake stuff
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/cake.scala24
-rw-r--r--src/main/scala/cake/application.scala13
-rw-r--r--src/main/scala/cake/database.scala13
-rw-r--r--src/main/scala/cake/logger.scala10
-rw-r--r--src/main/scala/cake/services.scala16
5 files changed, 76 insertions, 0 deletions
diff --git a/src/main/scala/cake.scala b/src/main/scala/cake.scala
new file mode 100644
index 0000000..51bdcb8
--- /dev/null
+++ b/src/main/scala/cake.scala
@@ -0,0 +1,24 @@
+package cake
+
+trait HasLogger extends cake.services.HasLogger {
+ type LoggerType = Logger
+ class Logger(logFileName: String) extends cake.logger.FileLogger(logFileName)
+}
+
+trait HasDatabase extends cake.services.HasDatabase {
+ type DatabaseType = Database
+ class Database(dsn: String, username: String, password: String) extends cake.database.DBI(dsn, username, password)
+}
+
+trait HasApplication extends cake.services.HasApplication {
+ this: cake.HasLogger with cake.HasDatabase =>
+ type ApplicationType = Application
+ class Application extends cake.application.Application(logger, database)
+}
+
+object Container extends HasApplication with HasLogger with HasDatabase {
+ val logger = new Logger("out.log")
+ // val database = Database.connect("dbi:mysql:myapp", "doy", "blah")
+ val database = new Database("dbi:mysql:myapp", "doy", "blah")
+ val application = new Application
+}
diff --git a/src/main/scala/cake/application.scala b/src/main/scala/cake/application.scala
new file mode 100644
index 0000000..8311dc8
--- /dev/null
+++ b/src/main/scala/cake/application.scala
@@ -0,0 +1,13 @@
+package cake.application
+
+import cake.logger.FileLogger
+import cake.database.DBI
+
+class Application (val logger: FileLogger, val dbh: DBI) {
+ def run (): Unit = {
+ logger.log("starting")
+ logger.log("got a dbh: " +
+ List(dbh.dsn, dbh.username, dbh.password).mkString(", "))
+ logger.log("ending")
+ }
+}
diff --git a/src/main/scala/cake/database.scala b/src/main/scala/cake/database.scala
new file mode 100644
index 0000000..d7f37e9
--- /dev/null
+++ b/src/main/scala/cake/database.scala
@@ -0,0 +1,13 @@
+package cake.database
+
+// class DBI private (
+class DBI (
+ val dsn: String,
+ val username: String,
+ val password: String) {
+}
+
+// object DBI {
+// def connect (dsn: String, username: String, password: String) =
+// new DBI(dsn, username, password)
+// }
diff --git a/src/main/scala/cake/logger.scala b/src/main/scala/cake/logger.scala
new file mode 100644
index 0000000..6c4a64d
--- /dev/null
+++ b/src/main/scala/cake/logger.scala
@@ -0,0 +1,10 @@
+package cake.logger
+
+trait Logger {
+ def log (msg: String): Unit
+}
+
+class FileLogger (val logFileName: String) extends Logger {
+ def log (msg: String): Unit =
+ println("writing " + msg + " to " + logFileName)
+}
diff --git a/src/main/scala/cake/services.scala b/src/main/scala/cake/services.scala
new file mode 100644
index 0000000..ed28203
--- /dev/null
+++ b/src/main/scala/cake/services.scala
@@ -0,0 +1,16 @@
+package cake.services
+
+trait HasApplication {
+ type ApplicationType
+ val application: ApplicationType
+}
+
+trait HasDatabase {
+ type DatabaseType
+ val database: DatabaseType
+}
+
+trait HasLogger {
+ type LoggerType
+ val logger: LoggerType
+}