summaryrefslogtreecommitdiff
path: root/cask/src/cask/main/Main.scala
diff options
context:
space:
mode:
Diffstat (limited to 'cask/src/cask/main/Main.scala')
-rw-r--r--cask/src/cask/main/Main.scala17
1 files changed, 10 insertions, 7 deletions
diff --git a/cask/src/cask/main/Main.scala b/cask/src/cask/main/Main.scala
index 9ac0022..fb07e77 100644
--- a/cask/src/cask/main/Main.scala
+++ b/cask/src/cask/main/Main.scala
@@ -57,18 +57,23 @@ abstract class BaseMain{
case None => writeResponse(exchange, handleError(404))
case Some(((routes, metadata), bindings, remaining)) =>
val params = for{
- endpointParams <- metadata.endpoint.getRawParams(ParamContext(exchange, remaining))
- decoratorParams <- Util.sequenceEither(
+ decoratorParams <- Util.sequenceEither[Response, cask.main.Decor[_], Seq](
metadata.decorators.map(e => e.getRawParams(ParamContext(exchange, remaining)))
)
- } yield (endpointParams ++ bindings.mapValues(metadata.endpoint.wrapPathSegment)) +: decoratorParams
+ endpointParams <- metadata.endpoint.getRawParams(ParamContext(exchange, remaining))
+ } yield (
+ (endpointParams.params ++ bindings.mapValues(metadata.endpoint.wrapPathSegment)) +:
+ decoratorParams.map(_.params),
+ () => {endpointParams.cleanup(); decoratorParams.foreach(_.cleanup())}
+ )
val result = params match{
case Left(resp) => resp
- case Right(paramValues) =>
- metadata.entryPoint
+ case Right((paramValues, cleanup)) =>
+ try metadata.entryPoint
.asInstanceOf[EntryPoint[cask.main.Routes, cask.model.ParamContext]]
.invoke(routes, ParamContext(exchange, remaining), paramValues)
+ finally cleanup()
}
@@ -86,8 +91,6 @@ abstract class BaseMain{
statusCode = 500)
)
}
-
-
}
}
}