Got it.
/**
* Template class for any SecureSocial SecuredAction that involves using user information.
* @param isSuccessful: SecuredRequest[AnyContent] => Boolean
*/
class UserReqAction(
isSuccessful: (SecuredRequest[AnyContent] => Boolean),
success: Result, failure: Result) extends SecureSocial {
def toReturn = SecuredAction(WithProvider("google")) {
implicit request => if (isSuccessful(request)) success else failure
}
}
/**
* Template class for any SecureSocial SecuredAction that does not use user information.
* @param isSuccessful: SecuredRequest[AnyContent] => Boolean
*/
class UserNotReqAction(isSuccessful: () => Boolean,
success: Result, failure: Result) extends SecureSocial {
def toReturn = SecuredAction(WithProvider("google")) {
implicit request => if (isSuccessful()) success else failure
}
}
// not curried example
def makeNewThing = new UserReqAction(
userOp.createThing,
Ok(Json.toJson(Json.obj("success" -> true, "msg" -> "Thing successfully created"))),
BadRequest("failed to create Thing")).toReturn
// curried example
def editThing(param1: _, param2: _, etc) = new UserReqAction(
userOp.updateThing(param1, param2, etc), // this is the currying
Ok(Json.toJson(Json.obj("success" -> true, "msg" -> "Thing successfully edited"))),
BadRequest("failed to edit Thing")).toReturn
def updateThing(param1: _, param2: _, etc)(request: SecuredRequest[AnyContent] ) {...}