diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | src/main/scala/cake.scala | 24 | ||||
-rw-r--r-- | src/main/scala/cake/application.scala | 13 | ||||
-rw-r--r-- | src/main/scala/cake/database.scala | 13 | ||||
-rw-r--r-- | src/main/scala/cake/logger.scala | 10 | ||||
-rw-r--r-- | src/main/scala/cake/services.scala | 16 |
6 files changed, 77 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target 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 +} |