From 2a37a2e09e6b56d86fd20d16a8f0b7907113c2e2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 28 Feb 2013 22:23:35 -0600 Subject: clean this up --- .gitignore | 3 +- build.sbt | 2 ++ src/main/scala/database/Database.scala | 22 ++++++++++++++ src/main/scala/logger/Logger.scala | 11 +++++++ src/main/scala/myapp.scala | 22 -------------- src/main/scala/myapp/MyApp.scala | 13 ++++++++ src/main/scala/myapp/Runner.scala | 24 +++++++++++++++ src/main/scala/myapp/application.scala | 13 -------- src/main/scala/myapp/cake/Container.scala | 49 +++++++++++++++++++++++++++++++ src/main/scala/myapp/cake/container.scala | 49 ------------------------------- src/main/scala/myapp/cake/services.scala | 38 ++++++++++++------------ src/main/scala/myapp/database.scala | 19 ------------ src/main/scala/myapp/logger.scala | 10 ------- 13 files changed, 142 insertions(+), 133 deletions(-) create mode 100644 src/main/scala/database/Database.scala create mode 100644 src/main/scala/logger/Logger.scala delete mode 100644 src/main/scala/myapp.scala create mode 100644 src/main/scala/myapp/MyApp.scala create mode 100644 src/main/scala/myapp/Runner.scala delete mode 100644 src/main/scala/myapp/application.scala create mode 100644 src/main/scala/myapp/cake/Container.scala delete mode 100644 src/main/scala/myapp/cake/container.scala delete mode 100644 src/main/scala/myapp/database.scala delete mode 100644 src/main/scala/myapp/logger.scala diff --git a/.gitignore b/.gitignore index 007798c..2f7896d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -/target -/project +target/ diff --git a/build.sbt b/build.sbt index 8367316..c26002f 100644 --- a/build.sbt +++ b/build.sbt @@ -3,3 +3,5 @@ name := "scala-di-test" version := "0.01" scalaVersion := "2.10.0" + +scalacOptions ++= Seq("-deprecation", "-unchecked", "-feature") diff --git a/src/main/scala/database/Database.scala b/src/main/scala/database/Database.scala new file mode 100644 index 0000000..3606593 --- /dev/null +++ b/src/main/scala/database/Database.scala @@ -0,0 +1,22 @@ +package database + +trait Database { + def query (search: String): String +} + +class DBI protected ( + dsn: String, + username: String, + password: String +) extends Database { + def query (search: String): String = + "found " + search + + override def toString: String = + List(dsn, username, password).mkString(", ") +} + +object DBI { + def connect (dsn: String, username: String, password: String): DBI = + new DBI(dsn, username, password) +} diff --git a/src/main/scala/logger/Logger.scala b/src/main/scala/logger/Logger.scala new file mode 100644 index 0000000..0e2fe79 --- /dev/null +++ b/src/main/scala/logger/Logger.scala @@ -0,0 +1,11 @@ +package logger + +trait Logger { + def log (msg: String): Unit +} + +class FileLogger (logFileName: String) extends Logger { + def log (msg: String) { + println("writing " + msg + " to " + logFileName) + } +} diff --git a/src/main/scala/myapp.scala b/src/main/scala/myapp.scala deleted file mode 100644 index 2de2372..0000000 --- a/src/main/scala/myapp.scala +++ /dev/null @@ -1,22 +0,0 @@ -import myapp.cake.container.Container - -object MyApp extends App { - val container1 = new Container - println("running container 1") - container1.application.run - println("done with container 1") - - val container2 = new Container(logFileName = "other.log") - println("running container 2") - container2.application.run - println("done with container 2") - - val container3 = new Container( - dsn = "dbi:SQLite::memory:", - username = "", - password = "" - ) - println("running container 3") - container3.application.run - println("done with container 3") -} diff --git a/src/main/scala/myapp/MyApp.scala b/src/main/scala/myapp/MyApp.scala new file mode 100644 index 0000000..f3c8dcc --- /dev/null +++ b/src/main/scala/myapp/MyApp.scala @@ -0,0 +1,13 @@ +package myapp + +import logger.Logger +import database.Database + +class MyApp (logger: Logger, dbh: Database) { + def run { + logger.log("starting") + logger.log("got a dbh: " + dbh) + logger.log(dbh.query("foo")) + logger.log("ending") + } +} diff --git a/src/main/scala/myapp/Runner.scala b/src/main/scala/myapp/Runner.scala new file mode 100644 index 0000000..15c3403 --- /dev/null +++ b/src/main/scala/myapp/Runner.scala @@ -0,0 +1,24 @@ +package myapp + +import myapp.cake.Container + +object Runner extends App { + val container1 = new Container + println("running container 1") + container1.application.run + println("done with container 1") + + val container2 = new Container(logFileName = "other.log") + println("running container 2") + container2.application.run + println("done with container 2") + + val container3 = new Container( + dsn = "dbi:SQLite::memory:", + username = "", + password = "" + ) + println("running container 3") + container3.application.run + println("done with container 3") +} diff --git a/src/main/scala/myapp/application.scala b/src/main/scala/myapp/application.scala deleted file mode 100644 index 24cda2a..0000000 --- a/src/main/scala/myapp/application.scala +++ /dev/null @@ -1,13 +0,0 @@ -package myapp.application - -import myapp.logger.Logger -import myapp.database.Database - -class MyApp (logger: Logger, dbh: Database) { - def run { - logger.log("starting") - logger.log("got a dbh: " + dbh) - logger.log(dbh.query("foo")) - logger.log("ending") - } -} diff --git a/src/main/scala/myapp/cake/Container.scala b/src/main/scala/myapp/cake/Container.scala new file mode 100644 index 0000000..ca952cd --- /dev/null +++ b/src/main/scala/myapp/cake/Container.scala @@ -0,0 +1,49 @@ +package myapp.cake + +import database.DBI +import logger.FileLogger + +import myapp.MyApp + +class Container ( + logFileName: String = "out.log", + dsn: String = "dbi:mysql:myapp", + username: String = "doy", + password: String = "blah" +) extends HasApplication with HasLogger with HasDatabase { + def application = new Application + // def logger = new Logger(logFileName) // non-singleton + lazy val logger = new Logger(logFileName) // singleton + def database = Database.connect(dsn, username, password) +} + +trait HasLogger extends services.HasLogger { + type LoggerType = Logger + + class Logger ( + logFileName: String + ) extends FileLogger(logFileName) with LoggerService +} + +trait HasDatabase extends services.HasDatabase { + type DatabaseType = Database + + class Database protected ( + dsn: String, + username: String, + password: String + ) extends DBI(dsn, username, password) with DatabaseService + + object Database { + def connect(dsn: String, username: String, password: String) = + new Database(dsn, username, password) + } +} + +trait HasApplication extends services.HasApplication { + this: HasLogger with HasDatabase => + + type ApplicationType = Application + + class Application extends MyApp(logger, database) with ApplicationService +} diff --git a/src/main/scala/myapp/cake/container.scala b/src/main/scala/myapp/cake/container.scala deleted file mode 100644 index 6437c8b..0000000 --- a/src/main/scala/myapp/cake/container.scala +++ /dev/null @@ -1,49 +0,0 @@ -package myapp.cake.container - -import myapp.cake.services -import myapp.logger.FileLogger -import myapp.database.DBI -import myapp.application.MyApp - -trait HasLogger extends services.HasLogger { - type LoggerType = Logger - - class Logger( - logFileName: String - ) extends FileLogger(logFileName) with LoggerService -} - -trait HasDatabase extends services.HasDatabase { - type DatabaseType = Database - - class Database protected ( - dsn: String, - username: String, - password: String - ) extends DBI(dsn, username, password) with DatabaseService - - object Database { - def connect(dsn: String, username: String, password: String) = - new Database(dsn, username, password) - } -} - -trait HasApplication extends services.HasApplication { - this: HasLogger with HasDatabase => - - type ApplicationType = Application - - class Application extends MyApp(logger, database) with ApplicationService -} - -class Container ( - logFileName: String = "out.log", - dsn: String = "dbi:mysql:myapp", - username: String = "doy", - password: String = "blah" -) extends HasApplication with HasLogger with HasDatabase { - def application = new Application - // def logger = new Logger(logFileName) // non-singleton - lazy val logger = new Logger(logFileName) // singleton - def database = Database.connect(dsn, username, password) -} diff --git a/src/main/scala/myapp/cake/services.scala b/src/main/scala/myapp/cake/services.scala index 6d4a860..c9579c6 100644 --- a/src/main/scala/myapp/cake/services.scala +++ b/src/main/scala/myapp/cake/services.scala @@ -1,30 +1,32 @@ -package myapp.cake.services +package myapp.cake -import myapp.database.Database -import myapp.logger.Logger +object services { + import database.Database + import logger.Logger -trait HasApplication { - type ApplicationType + trait HasApplication { + type ApplicationType - def application (): ApplicationType with ApplicationService + def application: ApplicationType with ApplicationService - trait ApplicationService { - def run (): Unit + trait ApplicationService { + def run: Unit + } } -} -trait HasDatabase { - type DatabaseType + trait HasDatabase { + type DatabaseType - def database (): DatabaseType with DatabaseService + def database: DatabaseType with DatabaseService - trait DatabaseService extends Database -} + trait DatabaseService extends Database + } -trait HasLogger { - type LoggerType + trait HasLogger { + type LoggerType - def logger (): LoggerType with LoggerService + def logger: LoggerType with LoggerService - trait LoggerService extends Logger + trait LoggerService extends Logger + } } diff --git a/src/main/scala/myapp/database.scala b/src/main/scala/myapp/database.scala deleted file mode 100644 index 9a321c2..0000000 --- a/src/main/scala/myapp/database.scala +++ /dev/null @@ -1,19 +0,0 @@ -package myapp.database - -trait Database { - def query (search: String): String -} - -class DBI protected ( - dsn: String, - username: String, - password: String -) extends Database { - def query (search: String): String = "found " + search - override def toString = List(dsn, username, password).mkString(", ") -} - -object DBI { - def connect (dsn: String, username: String, password: String) = - new DBI(dsn, username, password) -} diff --git a/src/main/scala/myapp/logger.scala b/src/main/scala/myapp/logger.scala deleted file mode 100644 index 8e985dc..0000000 --- a/src/main/scala/myapp/logger.scala +++ /dev/null @@ -1,10 +0,0 @@ -package myapp.logger - -trait Logger { - def log (msg: String): Unit -} - -class FileLogger (logFileName: String) extends Logger { - def log (msg: String): Unit = - println("writing " + msg + " to " + logFileName) -} -- cgit v1.2.3