Skip to content

Instantly share code, notes, and snippets.

View mariussoutier's full-sized avatar

Marius Soutier mariussoutier

View GitHub Profile
@mariussoutier
mariussoutier / Example.scala
Last active August 29, 2015 14:07
Use typed message in actors
class MyActor extends TypedMessageActor {
import MyActor._
def receive = ReceiveMessage[AllowedMessage] {
case Message1(text) =>
...
case Message2 =>
...
}
@mariussoutier
mariussoutier / AkkaSpecification.scala
Last active August 29, 2015 14:00 — forked from cessationoftime/AkkaSpecification.scala
Test Akka from Specs2, versions as of Play 2.2.x
import org.specs2.mutable._
import org.specs2.specification._
import org.specs2.matcher._
import org.specs2.execute._
import org.specs2.control.Debug
import org.specs2.main.ArgumentsShortcuts
import akka.testkit.TestKitBase
import akka.actor.ActorSystem
@mariussoutier
mariussoutier / togglewatch.js
Last active August 13, 2018 23:55
Toggle an AngularJS $watch expression. The default $watch can only be toggled once.
var toggleWatch = function(watchExpr, fn) {
var watchFn;
return function() {
if (watchFn) {
watchFn();
watchFn = undefined;
console.log("Disabled " + watchExpr);
} else {
watchFn = $scope.$watch(watchExpr, fn);
console.log("Enabled " + watchExpr);
@mariussoutier
mariussoutier / Callbacks.coffee
Created June 12, 2013 07:46
Different ways of calling functions with call-backs (i.e. multiple parameters that are functions) in CoffeeScript.
# Separate functions
success = (data, status, header) ->
promise.resolve data.user
error = (data, status, header) ->
promise.reject data.error
user = getUserById id, success, error
# Comma in front of each function
user = getUserById id
@mariussoutier
mariussoutier / 1Problem.scala
Last active December 16, 2015 05:49
Bridge Pattern in Scala
// Adding new functionality via inheritance leads to combinatorial explanation
abstract class Serializer {
def write(string: String): Unit
}
class CsvFileWriter extends FileWriter {
def writeFile(file: java.io.File) = //...
}
@mariussoutier
mariussoutier / JsonFormats.scala
Last active December 6, 2016 07:19
ReactiveMongo Play Plugin Extensions
package json
import reactivemongo.bson._
import reactivemongo.bson.handlers.DefaultBSONHandlers._
import play.api.libs.json._
import play.api.libs.json.Json._
import play.api.libs.json.util._
import play.api.libs.json.Writes._
import play.api.libs.functional.syntax._
package controllers
import play.api._
import play.api.mvc._
import play.api.libs.oauth._
import play.api.libs.ws._
import play.api.libs.iteratee._
object Twitter extends Controller {
# Map to language via RegEx
/$language<[a-z]{2}>/videos/:id controllers.Video.showVideo(id: Long, language: String)
# Hard-code supported languages
/de/videos/:id controllers.Video.showVideo(id: Long, language = "de")
/en/videos/:id controllers.Video.showVideo(id: Long, language = "en")
@mariussoutier
mariussoutier / Mail.scala
Created August 23, 2012 12:13
Sending mails fluently in Scala
package object mail {
implicit def stringToSeq(single: String): Seq[String] = Seq(single)
implicit def liftToOption[T](t: T): Option[T] = Some(t)
sealed abstract class MailType
case object Plain extends MailType
case object Rich extends MailType
case object MultiPart extends MailType
@mariussoutier
mariussoutier / Helper.scala
Created August 21, 2012 11:46
More template sequence helpers
package views.html.helper
import play.api.templates.Html
// Executes the first block if non-empty, the second otherwise
// Passes the entire seq (as in defining)
object ifEmptyOrElse {
def apply[T <: Seq[_]](t: T)(nonEmptyBlock: (T) => Html)(emptyBlock: => Html) = {
if (t.nonEmpty) nonEmptyBlock(t) else emptyBlock
}