Skip to content

Instantly share code, notes, and snippets.

View dsugden's full-sized avatar

Dave Sugden dsugden

  • Shopify
  • Gatineau
View GitHub Profile
@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 / 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)))
},
@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"))))
}
}
sealed trait ArticlePublishedState
case object UNPUBLISHED extends ArticlePublishedState
case object PUBLISHED extends ArticlePublishedState
case object DIRTY extends ArticlePublishedState
val articlePublishedMappings = Map(UNPUBLISHED.toString() -> UNPUBLISHED,
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))
}
val ArticleTable = new Table[Article]("Article") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name")
def body = column[Option[String]]("body")
def publishedBody = column[Option[String]]("publishedBody")
def userID = column[Long]("user_Id")
def created = column[Date]("created")
def category = column[String]("category")
def published = column[Boolean]("published")
def displayOrder = column[Int]("displayOrder")
@dsugden
dsugden / ArticleId.scala
Created January 21, 2013 00:38
Alternative representations of Article
case class ArticleId(id: Long)
case class ArticleForDisplay(id: Option[Long] = None,
publishedBody: Option[String],
userID: Long,
created: Date,
category: String,
published: Boolean)
case class ArticleForCreation(name: String, body: Option[String], category: ArticleCategory, published: Boolean = false)
@dsugden
dsugden / Example_calling_update.scala
Last active December 11, 2015 09:49
Example of JSON Read[A] and Try[A]
Articles.update(valid) match {
case Success(a) => {
cache.Cache.remove("blog")
Ok(Json.toJson(ArticleId(valid.id)))
}
case Failure(e) => {
Logger.error("update error:", e)
BadRequest(Json.toJson(Map("error" -> e.getMessage())))
}
}
@dsugden
dsugden / ArticleCreate.scala
Created January 21, 2013 00:55
Create an article
def create(userId: Long, articleForCreation: ArticleForCreation): Try[ArticleId] = database.withSession { implicit db: Session =>
Try(
ArticleId(
ArticleTable.forInsert.insert(
Article(None,
articleForCreation.name,
articleForCreation.body,
userId,
new java.sql.Date(System.currentTimeMillis()),
articleForCreation.category.toString(),