From 0618c5f6a591316c0211f9acdb0472b235bacc69 Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Tue, 20 Mar 2012 15:23:27 +0200 Subject: [PATCH] WaiSubsite --- yesod-core/Yesod/Dispatch.hs | 16 ++++++++++++++++ yesod-core/test/YesodCoreTest.hs | 2 ++ yesod-core/yesod-core.cabal | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/yesod-core/Yesod/Dispatch.hs b/yesod-core/Yesod/Dispatch.hs index b008210b..2e8ce726 100644 --- a/yesod-core/Yesod/Dispatch.hs +++ b/yesod-core/Yesod/Dispatch.hs @@ -1,6 +1,9 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE MultiParamTypeClasses #-} module Yesod.Dispatch ( -- * Quasi-quoted routing parseRoutes @@ -21,6 +24,8 @@ module Yesod.Dispatch -- * Convert to WAI , toWaiApp , toWaiAppPlain + -- * WAI subsites + , WaiSubsite (..) ) where import Data.Functor ((<$>)) @@ -187,3 +192,14 @@ sendRedirect y segments' env = then dest else (dest `mappend` Blaze.ByteString.Builder.fromByteString (W.rawQueryString env)) + +-- | Wrap up a normal WAI application as a Yesod subsite. +newtype WaiSubsite = WaiSubsite { runWaiSubsite :: W.Application } + +instance RenderRoute WaiSubsite where + data Route WaiSubsite = WaiSubsiteRoute [Text] [(Text, Text)] + deriving (Show, Eq, Read, Ord) + renderRoute (WaiSubsiteRoute ps qs) = (ps, qs) + +instance YesodDispatch WaiSubsite master where + yesodDispatch _master (WaiSubsite app) _tomaster _404 _405 _method _pieces _session = app diff --git a/yesod-core/test/YesodCoreTest.hs b/yesod-core/test/YesodCoreTest.hs index 012205e4..26047caf 100644 --- a/yesod-core/test/YesodCoreTest.hs +++ b/yesod-core/test/YesodCoreTest.hs @@ -9,6 +9,7 @@ import YesodCoreTest.NoOverloadedStrings import YesodCoreTest.InternalRequest import YesodCoreTest.ErrorHandling import YesodCoreTest.Cache +import qualified YesodCoreTest.WaiSubsite as WaiSubsite import qualified YesodCoreTest.Redirect as Redirect import qualified YesodCoreTest.JsLoader as JsLoader @@ -25,6 +26,7 @@ specs = , internalRequestTest , errorHandlingTest , cacheTest + , WaiSubsite.specs , Redirect.specs , JsLoader.specs ] diff --git a/yesod-core/yesod-core.cabal b/yesod-core/yesod-core.cabal index f56b8d7a..6bde7a33 100644 --- a/yesod-core/yesod-core.cabal +++ b/yesod-core/yesod-core.cabal @@ -1,5 +1,5 @@ name: yesod-core -version: 1.0.0.20120316 +version: 1.0.0.20120320 license: BSD3 license-file: LICENSE author: Michael Snoyman