Skip to content

Instantly share code, notes, and snippets.

View wolfendale's full-sized avatar

Michael Wolfendale wolfendale

View GitHub Profile
@wolfendale
wolfendale / FromStringMap.scala
Created October 31, 2015 23:42
Map[String, String] to Case Class
package wolfendale
import shapeless._
import shapeless.labelled._
import scala.util.{Failure, Success, Try}
trait FromStringMap[A] {
def apply(data: Map[String, String]): Try[A]
}
@wolfendale
wolfendale / forms.scala
Created November 13, 2015 13:30
Play Framework Boolean Formatter
implicit val booleanFormatter: Formatter[Boolean] = new Formatter[Boolean] {
override val format = Some(("format.boolean", Nil))
override def bind(key: String, data: Map[String, String]): Either[Seq[FormError], Boolean] =
data.get(key) match {
case Some(value) => value match {
case "true" => Right(true)
case "false" => Right(false)
case _ => Left(Seq(FormError(key, "error.boolean", Nil)))
@wolfendale
wolfendale / EitherMapping.scala
Last active December 8, 2015 15:58
Either Mapping
package forms
import play.api.data.{FormError, Mapping}
import play.api.data.validation.Constraint
case class EitherMapping[L, R](
lmapping: Mapping[L],
rmapping: Mapping[R],
key: String = "",
constraints: Seq[Constraint[Either[L, R]]] = Nil
@wolfendale
wolfendale / monoid.scala
Created February 26, 2016 10:33
Monoid Stuff
sealed trait Foobar
case object Foo extends Foobar
case object Bar extends Foobar
case class Baz(foo: Boolean = false, bar: Boolean = false)
implicit val bazMon: Monoid[Baz] =
new Monoid[Baz] {
override def zero: Baz = Baz()
override def append(f1: Baz, f2: => Baz): Baz =
@wolfendale
wolfendale / enum.scala
Last active April 18, 2016 13:25
Validation Shapeless
package wolfendale
trait Enum {
type Value <: Singleton
}
object Enum {
trait Aux[A <: Singleton] extends Enum { type Value = A }
}
@wolfendale
wolfendale / Main.scala
Last active June 23, 2017 14:13
Typeclass Example
package wolfendale
case class Person(name: String)
object Typeclasses extends App {
import Show.Showable
val tuple = (Person("Michael"), Person("Not Michael"))
val tuple2 = (Person("Michael"), (Person("Not Michael"), Person("Foo")))
@wolfendale
wolfendale / MyAction.scala
Created September 20, 2017 06:59
Route Params in Composed Actions
package com.example
import javax.inject.Inject
import play.api.i18n.MessagesApi
import play.api.mvc._
import scala.concurrent.Future
// note: `messagesApi` could be anything, it's just quite likely that your controller
@wolfendale
wolfendale / readme.txt
Created August 11, 2018 19:01
Pilgrimage (PuzzleScript Script)
Play this game by pasting the script in http://www.puzzlescript.net/editor.html
package wolfendale.scalacheck.regexp.models
sealed trait Group[A] {
def intersect(other: Group[A]): Group[A]
def ++(other: Group[A]): Group[A]
def --(other: Group[A]): Group[A]
}
@wolfendale
wolfendale / carMotor.scala
Last active October 28, 2018 16:43
Play JSON Reads
implicit lazy val reads: Reads[CarMotor] = {
import play.api.libs.json._
import play.api.libs.functional.syntax._
(__ \ "engineType").read[String].flatMap {
case "electric" =>
Reads.pure(Electric)
case "engine" => {
(__ \ "fuel").read[CarFuelType] and