Skip to content

Instantly share code, notes, and snippets.

View dsugden's full-sized avatar

Dave Sugden dsugden

  • Shopify
  • Gatineau
View GitHub Profile
def update(article: ArticleForUpdate): Try[Unit] = database.withSession { implicit db: Session =>
Try((ArticleTable.filter(a => a.id === article.id).map(a => a.name ~ a.body ~ a.displayOrder))
.update(article.name, article.body, article.displayOrder))
}
@dsugden
dsugden / ArticleControllerCreate.scala
Last active December 12, 2015 03:28
Implicit conversion for JSON
implicit val ArticleCreate = Json.reads[ArticleForCreation]
def create = IsAuthenticated { username =>
implicit request =>
userIdOpt.map { userId =>
request.body.asJson.map { json =>
json.validate[ArticleForCreation].fold(
invalid => {
BadRequest(Json.toJson(Map("error" -> invalid.head.toString)))
},
sealed trait ArticlePublishedState
case object UNPUBLISHED extends ArticlePublishedState
case object PUBLISHED extends ArticlePublishedState
case object DIRTY extends ArticlePublishedState
val articlePublishedMappings = Map(UNPUBLISHED.toString() -> UNPUBLISHED,
@dsugden
dsugden / ArticlePublishedReads.scala
Created February 4, 2013 14:32
ArticlePublishedReads
implicit object ArticlePublishedReads extends Reads[ArticlePublishedState] {
def reads(json: JsValue) = json match {
case JsString(cat) => {
val res = articlePublishedMappings collectFirst { case (s, a) if cat.equals(s) => JsSuccess(a) }
res.getOrElse(JsError(Seq(JsPath() -> Seq(ValidationError("no such category")))))
}
case _ => JsError(Seq(JsPath() -> Seq(ValidationError("validate.error.expected.jsnumber"))))
}
}
@dsugden
dsugden / UserRolesComponent.scala
Last active December 14, 2015 10:59
Roles for DeadBolt2
package models
import java.sql.Date
import play.Logger
import scala.util.{ Try, Success, Failure }
import play.cache.Cache
import org.mindrot.jbcrypt.BCrypt
import play.api.libs.Crypto
import play.libs.Scala
import be.objectify.deadbolt.core.models.Subject
@dsugden
dsugden / User.scala
Last active December 14, 2015 10:59
User for deadblot
package models
//import play.api.db._
import java.sql.Date
import play.Logger
import scala.util.{ Try, Success, Failure }
import play.cache.Cache
import org.mindrot.jbcrypt.BCrypt
import play.api.libs.Crypto
import play.libs.Scala
@dsugden
dsugden / FooState
Created February 22, 2014 14:05
OO state
class Foo{
private var fooState = 0
def next:Int = { fooState = fooState + 1; fooState }
def getFooState:Int = fooState
}
val foo = new Foo()
foo.next
foo.next
val result = foo.next
@dsugden
dsugden / gist:9155772
Last active August 29, 2015 13:56
More interesting OO State
case class Node(id:Int)
type SyncResponse = Either[String,List[Node]]
class Network {
var nodes: ListBuffer[Node] = ListBuffer.empty
val rng = scala.util.Random
/**
* Removes dead nodes
*/
def purge:SyncResponse = {
@dsugden
dsugden / StateTLearning.scala
Last active August 29, 2015 13:57
StateT with Option and Either
import scalaz._
import Scalaz._
object StateTLearning extends App with StateTFunctions {
case class DB(v: Int)
val initial = DB(1)
@dsugden
dsugden / MutableBad.scala
Last active August 29, 2015 14:02
Example of dangers of mutation
object MutableBad{
class MDate(dayIn:Int){ var day = dayIn }
type Task = Int
def scheduleTask(task:Task,date:MDate) = ???
var d = new MDate(22)