diff options
Diffstat (limited to 'src/main/scala/myapp')
-rw-r--r-- | src/main/scala/myapp/MyApp.scala (renamed from src/main/scala/myapp/application.scala) | 6 | ||||
-rw-r--r-- | src/main/scala/myapp/Runner.scala | 24 | ||||
-rw-r--r-- | src/main/scala/myapp/cake/Container.scala (renamed from src/main/scala/myapp/cake/container.scala) | 36 | ||||
-rw-r--r-- | src/main/scala/myapp/cake/services.scala | 38 | ||||
-rw-r--r-- | src/main/scala/myapp/database.scala | 19 | ||||
-rw-r--r-- | src/main/scala/myapp/logger.scala | 10 |
6 files changed, 65 insertions, 68 deletions
diff --git a/src/main/scala/myapp/application.scala b/src/main/scala/myapp/MyApp.scala index 24cda2a..f3c8dcc 100644 --- a/src/main/scala/myapp/application.scala +++ b/src/main/scala/myapp/MyApp.scala @@ -1,7 +1,7 @@ -package myapp.application +package myapp -import myapp.logger.Logger -import myapp.database.Database +import logger.Logger +import database.Database class MyApp (logger: Logger, dbh: Database) { def run { 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/cake/container.scala b/src/main/scala/myapp/cake/Container.scala index 6437c8b..ca952cd 100644 --- a/src/main/scala/myapp/cake/container.scala +++ b/src/main/scala/myapp/cake/Container.scala @@ -1,14 +1,26 @@ -package myapp.cake.container +package myapp.cake -import myapp.cake.services -import myapp.logger.FileLogger -import myapp.database.DBI -import myapp.application.MyApp +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( + class Logger ( logFileName: String ) extends FileLogger(logFileName) with LoggerService } @@ -35,15 +47,3 @@ trait HasApplication extends services.HasApplication { 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) -} |