PredicatedAction.scala 640 B

1234567891011121314151617181920
  1. package utils
  2. import play.api.mvc._
  3. import scala.concurrent.{Promise, Future}
  4. /**
  5. * A predicated action is one where a condition must be satisfied in order to proceed with the request. If the
  6. * condition is not satisfied then a supplied status result is yielded.
  7. */
  8. class PredicatedActionBuilder {
  9. def apply[A](p: => Boolean, failed: => SimpleResult)(action: Action[A]): Action[A] = new Action[A] {
  10. def apply(request: Request[A]): Future[SimpleResult] = {
  11. if (p) action(request) else Promise.successful(failed).future
  12. }
  13. lazy val parser = action.parser
  14. }
  15. }
  16. object PredicatedAction extends PredicatedActionBuilder