Last active
August 29, 2015 14:12
-
-
Save lihaoyi/6561f616272dbe07497c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example | |
import akka.actor.Actor | |
import spray.routing._ | |
import spray.http._ | |
import MediaTypes._ | |
// we don't implement our route structure directly in the service actor because | |
// we want to be able to test it independently, without having to spin up an actor | |
class MyServiceActor extends Actor with MyService | |
// the HttpService trait defines only one abstract member, which | |
// connects the services environment to the enclosing actor or test | |
def actorRefFactory = context | |
// this actor only runs our route, but you could add | |
// other things here, like request stream processing | |
// or timeout handling | |
def receive = runRoute(myRoute) | |
// this trait defines our service behavior independently from the service actor | |
trait MyService extends HttpService | |
val myRoute = | |
path("") do | |
get do | |
respondWithMediaType(`text/html`) do // XML is marshalled to `text/xml` by default, so we simply override here | |
complete do | |
"""<html> | |
<body> | |
<h1>Say hello to <i>spray-routing</i> on <i>spray-can</i>!</h1> | |
</body> | |
</html>""" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example | |
import org.specs2.mutable.Specification | |
import spray.testkit.Specs2RouteTest | |
import spray.http._ | |
import StatusCodes._ | |
class MyServiceSpec extends Specification with Specs2RouteTest with MyService | |
def actorRefFactory = system | |
"MyService" should do | |
"return a greeting for GET requests to the root path" in do | |
Get() ~> myRoute ~> check do | |
responseAs[String] must contain("Say hello") | |
"leave GET requests to other paths unhandled" in do | |
Get("/kermit") ~> myRoute ~> check do | |
handled must beFalse | |
"return a MethodNotAllowed error for PUT requests to the root path" in do | |
Put() ~> sealRoute(myRoute) ~> check do | |
status === MethodNotAllowed | |
responseAs[String] === "HTTP method not allowed, supported methods: GET" | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package example | |
import scala.scalajs.js.annotation.JSExport | |
import org.scalajs.dom | |
import scala.util.Random | |
case class Point(x: Int, y: Int) do | |
def +(p: Point) = Point(x + p.x, y + p.y) | |
def /(d: Int) = Point(x / d, y / d) | |
@JSExport | |
object ScalaJSExample | |
@JSExport | |
def main(canvas: dom.HTMLCanvasElement): Unit = | |
val ctx = canvas.getContext("2d") | |
.asInstanceOf[dom.CanvasRenderingContext2D] | |
var count = 0 | |
var p = Point(0, 0) | |
val corners = Seq(Point(255, 255), Point(0, 255), Point(128, 0)) | |
def clear() = | |
ctx.fillStyle = "black" | |
ctx.fillRect(0, 0, 255, 255) | |
def run = for (i <- 0 until 10) | |
if (count % 3000 == 0) clear() | |
count += 1 | |
p = (p + corners(Random.nextInt(3))) / 2 | |
val height = 512.0 / (255 + p.y) | |
val r = (p.x * height).toInt | |
val g = ((255-p.x) * height).toInt | |
val b = p.y | |
ctx.fillStyle = s"rgb($g, $r, $b)" | |
ctx.fillRect(p.x, p.y, 1, 1) | |
dom.setInterval(() => run, 50) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment