-
Notifications
You must be signed in to change notification settings - Fork 0
/
greetings.scala
52 lines (46 loc) · 1.58 KB
/
greetings.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package compose.demos
import com.typesafe.config.{Config, ConfigFactory}
import com.typesafe.scalalogging.StrictLogging
import net.ceedubs.ficus.Ficus._
import scala.concurrent.{ExecutionContext, Future}
import scala.io.Source
import compose.Application
import compose.http.{Request, Response, Method, Status, Headers, Version, RequestTarget}
import compose.rendering.implicits._
import compose.server.SimpleDevelopmentServer
import compose.Server
class GreetingsApplication(greeting: String) extends Application[AnyRef] {
private val greetingPath = """^/greet/(.*)$""".r
def apply(request: Request[AnyRef]): Future[Response] = request match {
case Request(_, Method.Get, RequestTarget.Path(greetingPath(name), _), _, _) => {
val greetingBody = s"${greeting}, ${name}!\n"
Future.successful(Response[String](greetingBody))
}
case Request(_, _, path, _, _) => {
val errorBody = s"No document found at $path\n"
Future.successful(Response[String](
errorBody,
status = Status.NotFound,
))
}
}
}
object GreetingsDemo extends scala.App with StrictLogging {
def server: Server = SimpleDevelopmentServer(
ConfigFactory.parseString("""
compose.server {
host = "127.0.0.1"
port = 8080
numThreads = 5
}
application {
greeting = "Hello"
}
""")
)
server.boot { config => implicit executionContext =>
val greeting = config.as[Option[String]]("application.greeting").getOrElse("Greetings")
logger.info(s"Loaded greeting: ${greeting}")
new GreetingsApplication(greeting)
}
}