web-routes-quasi 0.0.0 → 0.1.0
raw patch · 5 files changed
+42/−17 lines, 5 filessetup-changedPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Web.Routes.Quasi: createParse :: [Resource] -> Q [Clause]
+ Web.Routes.Quasi: createParse :: QuasiSiteSettings -> [Resource] -> Q [Clause]
- Web.Routes.Quasi: createRender :: [Resource] -> Q [Clause]
+ Web.Routes.Quasi: createRender :: QuasiSiteSettings -> [Resource] -> Q [Clause]
Files
- Setup.hs +0/−2
- Setup.lhs +11/−0
- Web/Routes/Quasi.hs +28/−13
- runtests.hs +2/−1
- web-routes-quasi.cabal +1/−1
− Setup.hs
@@ -1,2 +0,0 @@-import Distribution.Simple-main = defaultMain
+ Setup.lhs view
@@ -0,0 +1,11 @@+#!/usr/bin/env runhaskell++> module Main where+> import Distribution.Simple+> import System.Cmd (system)++> main :: IO ()+> main = defaultMainWithHooks (simpleUserHooks { runTests = runTests' })++> runTests' :: a -> b -> c -> d -> IO ()+> runTests' _ _ _ _ = system "runhaskell -DTEST runtests.hs" >> return ()
Web/Routes/Quasi.hs view
@@ -270,7 +270,7 @@ go' (IntPiece _) = Just (NotStrict, ConT ''Integer) go' (SlurpPiece _) = Just (NotStrict, AppT ListT $ ConT ''String) go' _ = Nothing- go'' (SubSite t _ _) = [(NotStrict, ConT $ mkName t)]+ go'' (SubSite t _ _) = [(NotStrict, ConT ''Routes `AppT` ConT (mkName t))] go'' _ = [] claz = [''Show, ''Read, ''Eq] @@ -322,8 +322,8 @@ | otherwise = False -- | Generates the set of clauses necesary to parse the given 'Resource's. See 'quasiParse'.-createParse :: [Resource] -> Q [Clause]-createParse res = do+createParse :: QuasiSiteSettings -> [Resource] -> Q [Clause]+createParse set res = do final' <- final clauses <- mapM go res return $ if areResourcesComplete res@@ -338,9 +338,14 @@ let pat = mkPat ps' h bod <- foldM go' (ConE $ mkName n) ps' bod' <- case h of- SubSite _ f _ -> do+ SubSite argType f _ -> do parse <- [|quasiParse|]- let parse' = parse `AppE` VarE (mkName f)+ let siteType = ConT ''QuasiSite+ `AppT` crApplication set+ `AppT` ConT (mkName argType)+ `AppT` crArgument set+ siteVar = VarE (mkName f) `SigE` siteType+ let parse' = parse `AppE` siteVar let rhs = parse' `AppE` VarE (mkName "var0") fm <- [|fmap|] return $ fm `AppE` bod `AppE` rhs@@ -385,8 +390,8 @@ -- | Generates the set of clauses necesary to render the given 'Resource's. See -- 'quasiRender'.-createRender :: [Resource] -> Q [Clause]-createRender res = mapM go res+createRender :: QuasiSiteSettings -> [Resource] -> Q [Clause]+createRender set res = mapM go res where go (Resource n ps h) = do let ps' = zip [1..] ps@@ -397,9 +402,14 @@ lastPat _ = [] go' (_, StaticPiece _) = Nothing go' (i, _) = Just $ VarP $ mkName $ "var" ++ show (i :: Int)- mkBod [] (SubSite _ f _) = do+ mkBod [] (SubSite argType f _) = do format <- [|quasiRender|]- let format' = format `AppE` VarE (mkName f)+ let siteType = ConT ''QuasiSite+ `AppT` crApplication set+ `AppT` ConT (mkName argType)+ `AppT` crArgument set+ siteVar = VarE (mkName f) `SigE` siteType+ let format' = format `AppE` siteVar return $ format' `AppE` VarE (mkName "var0") mkBod [] _ = lift ([] :: [String]) mkBod ((_, StaticPiece x):xs) h = do@@ -472,9 +482,14 @@ then [] else [Match WildP (NormalB $ VarE badMethod) []] return $ CaseE (VarE method) $ matches ++ final- SubSite _ f getArg -> do+ SubSite argType f getArg -> do qd <- [|quasiDispatch|]- let disp = qd `AppE` VarE (mkName f)+ let siteType = ConT ''QuasiSite+ `AppT` crApplication set+ `AppT` ConT (mkName argType)+ `AppT` crArgument set+ siteVar = VarE (mkName f) `SigE` siteType+ let disp = qd `AppE` siteVar o <- [|(.)|] let tomurl' = InfixE (Just $ VarE tomurl) o $ Just $ ConE $ mkName constr@@ -541,8 +556,8 @@ createQuasiSite set = do dt <- dataTypeDec set let tySyn = TySynInstD ''Routes [crArgument set] $ ConT $ crRoutes set- parseClauses <- createParse $ crResources set- renderClauses <- createRender $ crResources set+ parseClauses <- createParse set $ crResources set+ renderClauses <- createRender set $ crResources set dispatchClauses <- createQuasiDispatch set st <- siteDecType set s <- siteDec (crSite set) parseClauses renderClauses dispatchClauses
runtests.hs view
@@ -57,11 +57,12 @@ , crResources = [$parseRoutes| / Home GET /user/#userid User GET PUT DELETE-/static Static StaticRoutes siteStatic getStaticArgs+/static Static StaticArgs siteStatic getStaticArgs /foo/*slurp Foo /bar/$barparam Bar |] , crSite = mkName "theSite"+ , crMaster = Left $ ConT ''Int } handleFoo :: [String] -> Explode MyRoutes murl marg
web-routes-quasi.cabal view
@@ -1,5 +1,5 @@ name: web-routes-quasi-version: 0.0.0+version: 0.1.0 license: BSD3 license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>