summaryrefslogtreecommitdiffstats
path: root/src/main/scala/router.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/router.scala')
-rw-r--r--src/main/scala/router.scala9
1 files changed, 7 insertions, 2 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)) {