From edb531391b56eb964e4cfe513df9f4ac5e6fbcf4 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 14 Feb 2013 15:52:04 -0600 Subject: helper method to get a real path out of a route --- src/main/scala/router.scala | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/scala/router.scala b/src/main/scala/router.scala index eece34d..2bf8bfd 100644 --- a/src/main/scala/router.scala +++ b/src/main/scala/router.scala @@ -92,6 +92,20 @@ class Route[T] ( override def toString = path + def pathWithMapping (mapping: Map[String, String]): Option[String] = { + if (requiredVariableComponents.forall(mapping.isDefinedAt)) { + val boundComponents = components.flatMap { + case Optional(v) => (mapping get v).map(validComponentValue(v, _)) + case Variable(v) => validComponentValue(v, (mapping(v))) + case literal => Some(literal) + } + Some(boundComponents.mkString("/")) + } + else { + None + } + } + private lazy val components = path.split("/").filter(_.length > 0) @@ -124,6 +138,13 @@ class Route[T] ( case Some(rx) => rx.findFirstIn(component).nonEmpty case None => true } + + private def validComponentValue ( + name: String, + component: String + ): Option[String] = { + if (validate(name, component)) { Some(component) } else { None } + } } class Match[T] ( -- cgit v1.2.3-54-g00ecf