Skip to content

Instantly share code, notes, and snippets.

View andypetrella's full-sized avatar

Andy Petrella andypetrella

View GitHub Profile
@andypetrella
andypetrella / boilerplate.scala
Created April 22, 2012 14:09
Specs for using the Gatling Play 2.0 plugin
//creates a fake Play 2.0 server running on 3333 which defines the gatling plugin automatically
val server = Util.createServer(3333)
//function that starts the server, should be used in a specs Step BEFORE the whole specification starts
def startServer {
server.start()
}
//function that stops the server, should be used in a specs Step AFTER the whole specification has ran
def stopServer {
@andypetrella
andypetrella / monadTransformer.scala
Created June 11, 2012 09:14
Monad Transformer for Promise and Validation
case class ValidationPromised[E, A](promised: Promise[Validation[E, A]]) {
def map[B](f: A => B): ValidationPromised[E, B] =
ValidationPromised(promised map { valid =>
valid.fold(
fail => KO(fail),
suc => OK(f(suc))
)
})
def flatMap[B](f: A => ValidationPromised[E, B]): ValidationPromised[E, B] =
@andypetrella
andypetrella / both.scala
Created June 15, 2012 20:47
Steal Play2.0
val stealUserName = Intercept(
r => Cache.getAs[String]("username").toSuccess(NonEmptyList("No username")),
(err, v:Failure[NonEmptyList[String], String]) => BadRequest(v.e.list.mkString("\n"))
)
val stealUserId = Intercept(
r => Cache.getAs[String]("userid").map(_.toInt).toSuccess(NonEmptyList("No userid")),
(err, v:Failure[NonEmptyList[String], Int]) => BadRequest(v.e.list.mkString("\n"))
)
val stealUserNameAndId = Intercept(
r => for {
@andypetrella
andypetrella / security.scala
Created June 16, 2012 16:34
Interceptors typesafe'ly combined
val securedByUserName = Intercept(
r => Cache.getAs[String]("username").toSuccess(NonEmptyList("No username")),
(err, v:Failure[NonEmptyList[String], String]) => Unauthorized(v.e.list.mkString("\n"))
)
val securedByUserId = Intercept(
r => Cache.getAs[String]("userid").map(_.toInt).toSuccess(NonEmptyList("No userid")),
(err, v:Failure[NonEmptyList[String], Int]) => Unauthorized(v.e.list.mkString("\n"))
)
@andypetrella
andypetrella / Build.scala
Created July 20, 2012 19:45
Gatling SBT Test
import sbt._
import Keys._
import GatlingPlugin._
object MinimalBuild extends Build {
val SNAPSHOT = "-SNAPSHOT"
val appName = "gatling-sbt-sample"
val buildVersion = "0.0.1-SNAPSHOT"
@andypetrella
andypetrella / sample-dsl.scala
Last active December 11, 2015 04:18
Un exemple de DSL très simple avec Scala
case class Banque(nom:String) {banque =>
def accepte(m:Montant) =
CompteBuilder(banque, m)
}
implicit def stringToBanque(s:String) = Banque(s)
implicit def intWithDevise(i:Int) = new {
@andypetrella
andypetrella / main.scala
Last active December 11, 2015 23:39
Another try to define Model with Id, crud and so on. But using Type Classes rather than self type and recursive type definition
package tc
object Main extends App {
import tc.Action._
import tc.Generator._
import tc.User._
// a user
val user = User(None, "noootsab", true, 31)
println(s"User $user")
@andypetrella
andypetrella / Covariant.scala
Created February 2, 2013 16:27
Co&ContraVariance in Scala (and not Java)
object Covariant extends App {
trait Vehicle {
def name:String
def velocity:Float
}
case class Car(name:String, velocity:Float) extends Vehicle
object VehiculeStats {
def meanVelocity(vs:List[Vehicle]):Float =
@andypetrella
andypetrella / test.scala
Created March 3, 2013 13:45
DuckTyping.scala
package test
object Template {
case object A {
def apply(i:Int) = "A " + i
}
case object B {
def apply() = "B"
@andypetrella
andypetrella / crap.scala
Created March 6, 2013 08:37
Swithc to Play 2.1 in a quick and dirty fashion... at least for json
import play.api.libs.json._
//this is crap but ease a lot the switch to play 2.1
implicit def smashThat[A](js:JsResult[A]):A = js.recoverTotal { err => throw new RuntimeException(Json.stringify(JsError.toFlatJson(err))) }
val j = Json.obj("a"->1, "b"->2)
val m:Map[String, Int] = Json.fromJson[Map[String, Int]](j)