From b1b55f620a72a13ffd02b6e76f92d97a1a82748c Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 14 Feb 2013 11:02:44 -0600 Subject: implement optionals --- src/main/scala/router.scala | 9 +++++++-- src/test/scala/basic.scala | 15 +++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/scala/router.scala b/src/main/scala/router.scala index f1fbfa7..fbbd052 100644 --- a/src/main/scala/router.scala +++ b/src/main/scala/router.scala @@ -58,7 +58,7 @@ class Route[T] ( components: Seq[String] = components, mapping: Map[String, String] = defaults ): Option[Match[T]] = { - if (components.length == 0 && parts.length == 0) { + if (components.filter(!isOptional(_)).length == 0 && parts.length == 0) { Some(new Match[T](path, mapping, target)) } else if (components.length == 0 || parts.length == 0) { @@ -67,7 +67,12 @@ class Route[T] ( else { components.head match { case Optional(name) => { - throw new Error("unsupported") + if (validate(name, parts.head)) { + route(parts.tail, components.tail, mapping + (name -> parts.head)) + } + else { + route(parts, components.tail, mapping) + } } case Variable(name) => { if (validate(name, parts.head)) { diff --git a/src/test/scala/basic.scala b/src/test/scala/basic.scala index 15280e5..070ace8 100644 --- a/src/test/scala/basic.scala +++ b/src/test/scala/basic.scala @@ -131,13 +131,12 @@ class Basic extends FunSuite { ) ) - // TODO support optionals - // testRoute( - // router, "test/x1", Map( - // "controller" -> "test", - // "x" -> "x1", - // "y" -> "y" - // ) - // ) + testRoute( + router, "test/x1", Map( + "controller" -> "test", + "x" -> "x1", + "y" -> "y" + ) + ) } } -- cgit v1.2.3-54-g00ecf