Skip to content

Instantly share code, notes, and snippets.

@ryanpbrewster
ryanpbrewster / Format[DateTime] for Working with JSON in Play 2.1 by Greg Methvin.scala
Created May 2, 2016 21:16
Format[DateTime] for Working with JSON in Play 2.1 by Greg Methvin.scala
import play.api.libs.json._
val pattern = "yyyy-MM-dd'T'HH:mm:ssz"
implicit val dateFormat = Format[DateTime](
Reads.jodaDateReads(pattern),
Writes.jodaDateWrites(pattern)
)
Json.toJson(new DateTime("1952-03-11"))
// => "1952-03-11T00:00:00PDT"
@ryanpbrewster
ryanpbrewster / Seq matching for Pattern matching in Scala 2.10 by Greg Methvin.scala
Created May 2, 2016 21:27
Seq matching for Pattern matching in Scala 2.10 by Greg Methvin
def sort[T <% Ordered[T]](seq: Seq[T]): Seq[T] = seq match {
case Seq() => Seq()
case x +: xs =>
val (before, after) = xs partition (_ < x)
sort(before) ++ sort(x +: after)
}
sort(IndexedSeq("Greg", "Eishay", "Andrew"))
// => List(Andrew, Eishay, Greg)
@ryanpbrewster
ryanpbrewster / Abstract types for Pattern matching in Scala 2.10 by Greg Methvin.scala
Created May 2, 2016 21:34
Abstract types for Pattern matching in Scala 2.10 by Greg Methvin.scala
import reflect.ClassTag
import reflect.ClassTag
def filterBy[T: ClassTag](seq: Seq[Any]) = seq collect {
case x: T => x
}
filterBy[String](Seq(1, "two", "three"))
// => Seq[String] = List(two, three)
@ryanpbrewster
ryanpbrewster / Better type-check for Pattern matching in Scala 2.10 by Greg Methvin.scala
Created May 2, 2016 21:35
Better type-check for Pattern matching in Scala 2.10 by Greg Methvin
val (x, y): (Int, Int) = ("a", "b")
:7: error: type mismatch;
found : String("a")
required: Int
val (x, y): (Int, Int) = ("a", "b")
@ryanpbrewster
ryanpbrewster / Class-cast exception for Pattern matching in Scala 2.10 by Greg Methvin.scala
Created May 2, 2016 21:36
Class-cast exception for Pattern matching in Scala 2.10 by Greg Methvin
val (a, b): (Int, Int) = ("a", "b")
:7: warning: non variable type-argument Int in type pattern (Int, Int) is unchecked since it is eliminated by erasure
val (a, b): (Int, Int) = ("a", "b")
^
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
...
@ryanpbrewster
ryanpbrewster / Facebook Auth for Mobile Auth with Play! and SecureSocial by Greg Methvin.m
Created May 2, 2016 22:02
Facebook Auth for Mobile Auth with Play! and SecureSocial by Greg Methvin
- (void)authenticateWithFacebookToken:(NSString *)accessToken runningThisOnSuccess:(void (^)())success orThisOnFailure:(void (^)())failure
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://example.com/authenticateMobile/facebook"]];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@{@"accessToken": accessToken} options:0 error:&#038;error];
if (!jsonData) {
runErrorHandling(error);
failure();
return;
}
@ryanpbrewster
ryanpbrewster / Auth Controller for Mobile Auth with Play! and SecureSocial by Greg Methvin.scala
Created May 2, 2016 22:04
Auth Controller for Mobile Auth with Play! and SecureSocial by Greg Methvin
import play.api.libs.json.Json
import play.api.mvc._
import securesocial.core._
class AuthController extends Controller {
private implicit val readsOAuth2Info = Json.reads[OAuth2Info]
// Some of the below code is taken from ProviderController in SecureSocial
def authenticateMobile(providerName: String) = Action(parse.json) { implicit request =>
// format: { "accessToken": "..." }
val oauth2Info = request.body.asOpt[OAuth2Info]
@ryanpbrewster
ryanpbrewster / Custom config for Custom configuration in Play Framework by Greg Methvin.scala
Created May 2, 2016 22:52
Custom config for Custom configuration in Play Framework by Greg Methvin
// Get a file within the .fortytwo folder in the user's home directory
def getUserFile(filename: String): File =
new File(Seq(System.getProperty("user.home"), ".fortytwo", filename).mkString(File.separator))
override def onLoadConfig(config: Configuration, path: File, classloader: ClassLoader, mode: Mode.Mode) = {
val localConfig = Configuration(ConfigFactory.parseFile(getUserFile("local.conf")))
super.onLoadConfig(config ++ localConfig, path, classloader, mode)
}
@ryanpbrewster
ryanpbrewster / Reading custom config for Custom configuration in Play Framework by Greg Methvin.scala
Created May 2, 2016 22:53
Reading custom config for Custom configuration in Play Framework by Greg Methvin
import play.api.Play.current
def coolFeatureEnabled = current.configuration.getBoolean("coolFeatureEnabled").getOrElse(false)
def myAction() = Action { request =>
if (coolFeatureEnabled) {
// do cool stuff
} else {
// do regular stuff
}
}
@ryanpbrewster
ryanpbrewster / ActorBuilder for Testing with Akka and Guice by Greg Methvin.scala
Created May 2, 2016 22:54
ActorBuilder for Testing with Akka and Guice by Greg Methvin
class ActorBuilderImpl extends ActorBuilder {
def apply(system: ActorSystem, provider: Provider[_ <: Actor]): ActorRef =
system.actorOf(Props { provider.get })
}