Skip to content

Instantly share code, notes, and snippets.

View josephpconley's full-sized avatar

Joe Conley josephpconley

View GitHub Profile
object Global extends GlobalSettings {
def json(errorCode: String, message: String) = Json.obj("ERR" -> errorCode, "MESSAGE" -> message)
override def onError(request: RequestHeader, ex: Throwable) = {
Logger.error("Internal Error", ex)
Future.successful(InternalServerError(json("0001", ex.getStackTrace())))
}
override def onHandlerNotFound(request: RequestHeader): Result = Future.successful(NotFound(json("0002", request.toString)))
//Composed action to handle logging and measuring in same request
object LoggedMeasured extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[SimpleResult]) = block(request)
override def composeAction[A](action: Action[A]) = Logged(Measured(action))
}
object Application extends Controller{
def batch = LoggedMeasured {
val result = User.batchUpload
Ok(result.toString)
//Stand-alone logging
def editUser = Logged {
val result = User.edit
Ok(result.toString)
}
//Stand-alone measured
def calc = Measured {
//calculate pi using taylor series
val result = Pi.calculate(1000)
//atomic action to log requests
case class Logged[A](action: Action[A]) extends Action[A] {
def apply(request: Request[A]): Future[SimpleResult] = {
Logger.info("Calling action")
action(request)
}
lazy val parser = action.parser
}
object Application extends Controller {
//store data
def findById(id: String) = Action {
val user: User = Cache.getOrElse[User]("user." + id) {
User.find(id)
}
Ok(views.html.show(user))
}
# RESTful routes for Users collection
GET /users controllers.Users.list
POST /users controllers.Users.insert
DELETE /users controllers.Users.deleteAll
# RESTful routes by User
GET /users/:id controllers.Users.findById(id: String)
PUT /users/:id controllers.Users.update
DELETE /users/:id controllers.Users.delete(id: String)
@josephpconley
josephpconley / JS.scala
Created February 25, 2014 12:34
Convert JSON object into an empty JSON object
object JS {
def default(js: JsValue): JsValue = js match {
case JsObject(fields) => JsObject(fields.map(f => f._1 -> default(f._2)))
case JsString(s) => JsString("")
case JsArray(a) => JsArray()
case JsNumber(n) => JsNumber(0.0)
case JsBoolean(b) => JsBoolean(false)
case _ => JsString("")
}
}
@josephpconley
josephpconley / NestedJson.scala
Created February 12, 2014 17:29
Play controller serving nested case class as Json
package controllers
case class Root(id: Int, name: String, children: Seq[Child])
case class Child(id: Int, name: String)
object Application extends Controller with Secured{
def test = Action { implicit req =>
@josephpconley
josephpconley / models.sbt
Created February 10, 2014 13:41
Trying to get custom packaging to work...to no avail
lazy val CustomPackage = config("custompackage") extend(Compile) describedAs("Custom package configuration")
mappings in (CustomPackage, packageBin) ~= { (ms: Seq[(File, String)]) =>
ms filter {
case (file, toPath) => {
val shouldInclude = toPath.startsWith("models")
println("===========" + file + " " + toPath + " " + shouldInclude)
shouldInclude
}
}
package npr
import puzzles.WordBank
/**
* User: jconley
* Date: 1/26/14
*
* http://puzzles.blainesville.com/2014/01/npr-sunday-puzzle-jan-26-2014-remove.html
*/