packages feed

wai-routing 0.11.1 → 0.12

raw patch · 4 files changed

+34/−12 lines, 4 filesdep +containersdep ~wai-route

Dependencies added: containers

Dependency ranges changed: wai-route

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+0.12+-----------------------------------------------------------------------------+- Update `wai-route` dependency and change `prepare` and `route` to work on+  `Tree (App m)` instead of `[(ByteString, App m)]`.+ 0.11.1 ----------------------------------------------------------------------------- - Bugfix release
src/Network/Wai/Routing/Route.hs view
@@ -29,6 +29,16 @@     , patch     , Renderer     , renderer++      -- * Re-exports+    , Tree+    , Tree.toList+    , Tree.foldTree+    , Tree.mapTree++    , Tree.Payload+    , Tree.path+    , Tree.value     ) where  import Control.Applicative hiding (Const)@@ -44,6 +54,7 @@ import Network.Wai import Network.Wai.Predicate import Network.Wai.Predicate.Request+import Network.Wai.Route.Tree (Tree) import Network.Wai.Routing.Request  import qualified Data.ByteString.Char8  as C@@ -184,11 +195,11 @@ -- | Routes requests to handlers based on predicated route declarations. -- Note that @route (prepare ...)@ behaves like a WAI 'Application' generalised to -- arbitrary monads.-route :: Monad m => [(ByteString, App m)] -> Request -> Continue m -> m ResponseReceived-route rm = let !tr = Tree.fromList rm in \rq k ->+route :: Monad m => Tree (App m) -> Request -> Continue m -> m ResponseReceived+route tr rq k =     case Tree.lookup tr (Tree.segments $ rawPathInfo rq) of-        Just (f, v) -> f (fromReq v (fromRequest rq)) k-        Nothing     -> k notFound+        Just  e -> Tree.value e (fromReq (Tree.captured $ Tree.captures e) (fromRequest rq)) k+        Nothing -> k notFound   where     notFound = responseLBS status404 [] Lazy.empty @@ -212,10 +223,11 @@ {-# INLINE continue #-}  -- | Run the 'Routes' monad and return the handlers per path.-prepare :: Monad m => Routes a m b -> [(ByteString, App m)]+prepare :: Monad m => Routes a m b -> Tree (App m) prepare (Routes rr) =-    let s = execState rr zero in-    map (\g -> (_path (L.head g), select (renderfn s) g)) (normalise (routes s))+    let s = execState rr zero+        r = normalise (routes s)+    in Tree.fromList $ map (\g -> (_path (L.head g), select (renderfn s) g)) r  -- | Group routes by path. normalise :: [Route a m] -> [[Route a m]]
test/Tests/Wai/Route.hs view
@@ -22,6 +22,7 @@ import Test.Tasty.HUnit import Tests.Wai.Util +import qualified Data.Set             as Set import qualified Data.ByteString.Lazy as Lazy  type ApplicationM m = Request -> (Response -> m ResponseReceived) -> m ResponseReceived@@ -38,8 +39,11 @@     let routes = prepare sitemap      [7,6,5,4,3,2,1,0] @=? map routeMeta (examine sitemap)-    ["/a", "/b", "/c", "/d", "/e", "/f", "/g", "/h"] @=? map fst routes +    let ra = Set.fromList ["/a", "/b", "/c", "/d", "/e", "/f", "/g", "/h"]+    let rb = foldTree (\p a -> path p `Set.insert` a) Set.empty routes+    ra @=? rb+     let handler = route routes      testEndpointA handler@@ -231,7 +235,7 @@  testMedia :: IO () testMedia = do-    let [(_, h)] = prepare sitemapMedia+    let [h] = map value . toList $ prepare sitemapMedia     expectMedia "application/json;q=0.3, application/x-thrift;q=0.7" "application/x-thrift" h     expectMedia "application/json;q=0.7, application/x-thrift;q=0.3" "application/json" h @@ -257,7 +261,7 @@  testErrorRenderer :: IO () testErrorRenderer = do-    let [(_, h)] = prepare sitemapErrorRenderer+    let [h] = map value . toList $ prepare sitemapErrorRenderer     let rq = defaultRequest { rawPathInfo = "/error" }     rs <- apply h $ fromReq [] . fromRequest $ rq     status400               @=? responseStatus rs
wai-routing.cabal view
@@ -1,5 +1,5 @@ name:                wai-routing-version:             0.11.1+version:             0.12 synopsis:            Declarative routing for WAI. license:             OtherLicense license-file:        LICENSE@@ -86,7 +86,7 @@       , transformers          >= 0.3   && < 0.5       , wai                   >= 3.0   && < 4.0       , wai-predicates        == 0.8.*-      , wai-route             == 0.2.*+      , wai-route             == 0.3.*  test-suite wai-routing-tests     type:             exitcode-stdio-1.0@@ -106,6 +106,7 @@       , bytestring       , bytestring-conversion       , case-insensitive+      , containers       , http-types       , tasty                 >= 0.8       , tasty-hunit           >= 0.9