Initial port to QuasiSite, rather rough

This commit is contained in:
Michael Snoyman 2010-04-20 08:52:19 -07:00
parent 99c0eb060b
commit c875c949fe
3 changed files with 24 additions and 14 deletions

View File

@ -147,11 +147,15 @@ getRouteMaster = do
runHandlerSub' :: HasReps c
=> GHandler sub master c
-> (master, master -> sub, Routes sub -> Routes master, Routes master -> String)
-> (Routes master -> String)
-> Routes sub
-> (Routes sub -> String)
-> (Routes sub -> Routes master)
-> master
-> (master -> sub)
-> String
-> YesodApp
runHandlerSub' handler arg route render = runHandlerSub handler arg (Just route) render
runHandlerSub' handler mrender surl tomurl marg tosarg _method =
runHandlerSub handler (marg, tosarg, tomurl, mrender) (Just surl) (mrender . tomurl)
runHandlerSub :: HasReps c
=> GHandler sub master c

View File

@ -27,7 +27,7 @@ mkYesod name res = do
, crResources = res
, crSite = site
}
return [tySyn, yes, x, y, z]
return [tySyn, yes, x, {-y, -}z]
mkYesodSub :: String -> [Name] -> [Resource] -> Q [Dec]
mkYesodSub name ctxs res = do
@ -55,4 +55,4 @@ mkYesodSub name ctxs res = do
let helper claz = ClassP claz [VarT man]
let ctxs' = map helper ctxs
let y' = ForallT [PlainTV man] ctxs' y
return [tySyn, x, SigD yname y', z]
return [tySyn, x, {-SigD yname y',-} z]

View File

@ -23,6 +23,7 @@ import Data.Maybe (fromMaybe)
import Web.Mime
import Web.Encodings (parseHttpAccept)
import Web.Routes (Site (..), encodePathInfo, decodePathInfo)
import Web.Routes.Quasi (QuasiSite (..))
import Data.List (intercalate)
import qualified Network.Wai as W
@ -37,7 +38,7 @@ import qualified Network.Wai.Handler.CGI as CGI
import System.Environment (getEnvironment)
class YesodSite y where
getSite :: Site (Routes y) (String -> YesodApp -> y -> YesodApp)
getSite :: QuasiSite YesodApp (Routes y) y (Routes master) master
class YesodSite a => Yesod a where
-- | The encryption key to be used for encrypting client sessions.
@ -156,18 +157,23 @@ toWaiApp' y resource session env = do
method = B8.unpack $ W.methodToBS $ W.requestMethod env
types = httpAccept env
pathSegments = filter (not . null) $ cleanupSegments resource
eurl = parsePathSegments site pathSegments
eurl = quasiParse site pathSegments
render u = approot y ++ '/'
: encodePathInfo (fixSegs $ formatPathSegments site u)
: encodePathInfo (fixSegs $ quasiRender site u)
rr <- parseWaiRequest env session
onRequest y rr
print pathSegments
print pathSegments -- FIXME remove
let ya = case eurl of
Left _ -> runHandler (errorHandler y NotFound) y Nothing render
Right url -> handleSite site render url method
(badMethod method) y
let url' = either (const Nothing) Just eurl
let eh er = runHandler (errorHandler y er) y url' render
Nothing -> runHandler (errorHandler y NotFound) y Nothing render
Just url -> quasiDispatch site
render
url
id
y
id
(badMethod method)
method
let eh er = runHandler (errorHandler y er) y eurl render
unYesodApp ya eh rr types >>= responseToWaiResponse
cleanupSegments :: [B.ByteString] -> [String]