From a1df470d01bc39322f3ae9b4c653cb5186c21d5c Mon Sep 17 00:00:00 2001 From: Anupam Jain Date: Wed, 13 Jan 2016 10:47:50 +0530 Subject: [PATCH 1/2] Allow subsites within hierarchical routes --- yesod-core/Yesod/Routes/TH/Dispatch.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/yesod-core/Yesod/Routes/TH/Dispatch.hs b/yesod-core/Yesod/Routes/TH/Dispatch.hs index a49dc8e4..5d3596ec 100644 --- a/yesod-core/Yesod/Routes/TH/Dispatch.hs +++ b/yesod-core/Yesod/Routes/TH/Dispatch.hs @@ -176,11 +176,12 @@ mkDispatchClause MkDispatchSettings {..} resources = do subDispatcherE <- mdsSubDispatcher runHandlerE <- mdsRunHandler sub <- newName "sub" + sroute <- newName "sroute" let sub2 = LamE [VarP sub] (foldl' (\a b -> a `AppE` b) (VarE (mkName getSub) `AppE` VarE sub) dyns) let reqExp' = setPathInfoE `AppE` VarE restPath `AppE` reqExp route' = foldl' AppE (ConE (mkName name)) dyns - route = foldr AppE route' extraCons + route = LamE [VarP sroute] $ foldr AppE (AppE route' $ VarE sroute) extraCons exp = subDispatcherE `AppE` runHandlerE `AppE` sub2 From 0d99f94e5a7f4ca88cf4a28acd4a990c6090ffb5 Mon Sep 17 00:00:00 2001 From: Anupam Jain Date: Thu, 14 Jan 2016 11:30:06 +0530 Subject: [PATCH 2/2] Add a testcase for nested subsites --- yesod-core/test/YesodCoreTest/WaiSubsite.hs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/yesod-core/test/YesodCoreTest/WaiSubsite.hs b/yesod-core/test/YesodCoreTest/WaiSubsite.hs index b319b9e3..6b55601f 100644 --- a/yesod-core/test/YesodCoreTest/WaiSubsite.hs +++ b/yesod-core/test/YesodCoreTest/WaiSubsite.hs @@ -15,6 +15,8 @@ data Y = Y mkYesod "Y" [parseRoutes| / RootR GET /sub WaiSubsiteR WaiSubsite getApp +/nested NestedR: + /sub NestedWaiSubsiteR WaiSubsite getApp |] instance Yesod Y @@ -36,3 +38,8 @@ specs = describe "WaiSubsite" $ do res <- request defaultRequest { pathInfo = ["sub", "foo"] } assertStatus 200 res assertBodyContains "WAI" res + + it "nested subsite" $ app $ do + res <- request defaultRequest { pathInfo = ["nested", "sub", "foo"] } + assertStatus 200 res + assertBodyContains "WAI" res