packages feed

wai-routes 0.6.1 → 0.6.2

raw patch · 6 files changed

+43/−14 lines, 6 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Network.Wai.Middleware.Routes: maybeRoute :: HandlerM master (Maybe (Route master))
+ Network.Wai.Middleware.Routes: routeAttrSet :: RouteAttrs master => HandlerM master (Set Text)
+ Network.Wai.Middleware.Routes.Handler: maybeRoute :: HandlerM master (Maybe (Route master))
+ Network.Wai.Middleware.Routes.Handler: routeAttrSet :: RouteAttrs master => HandlerM master (Set Text)
+ Network.Wai.Middleware.Routes.Routes: currentRoute :: RequestData master -> Maybe (Route master)
- Network.Wai.Middleware.Routes: data RequestData
+ Network.Wai.Middleware.Routes: data RequestData master
- Network.Wai.Middleware.Routes: nextApp :: RequestData -> Application
+ Network.Wai.Middleware.Routes: nextApp :: RequestData master -> Application
- Network.Wai.Middleware.Routes: runNext :: RequestData -> ResponseHandler
+ Network.Wai.Middleware.Routes: runNext :: App master
- Network.Wai.Middleware.Routes: type Handler master = master -> RequestData -> ResponseHandler
+ Network.Wai.Middleware.Routes: type Handler master = master -> App master
- Network.Wai.Middleware.Routes: waiReq :: RequestData -> Request
+ Network.Wai.Middleware.Routes: waiReq :: RequestData master -> Request
- Network.Wai.Middleware.Routes.Routes: data RequestData
+ Network.Wai.Middleware.Routes.Routes: data RequestData master
- Network.Wai.Middleware.Routes.Routes: nextApp :: RequestData -> Application
+ Network.Wai.Middleware.Routes.Routes: nextApp :: RequestData master -> Application
- Network.Wai.Middleware.Routes.Routes: runNext :: RequestData -> ResponseHandler
+ Network.Wai.Middleware.Routes.Routes: runNext :: App master
- Network.Wai.Middleware.Routes.Routes: type Handler master = master -> RequestData -> ResponseHandler
+ Network.Wai.Middleware.Routes.Routes: type Handler master = master -> App master
- Network.Wai.Middleware.Routes.Routes: waiReq :: RequestData -> Request
+ Network.Wai.Middleware.Routes.Routes: waiReq :: RequestData master -> Request

Files

README.md view
@@ -1,4 +1,4 @@-Wai Routes (wai-routes-0.6.1)+Wai Routes (wai-routes-0.6.2) ====================================  [![Build Status](https://travis-ci.org/ajnsit/wai-routes.png)](https://travis-ci.org/ajnsit/wai-routes)@@ -8,6 +8,7 @@ Features:   - Automatic generation of Route boilerplate using TH   - Easy Nested Routes+  - General purpose Route Attributes/Annotations   - Sitewide Master datatype which is passed to all handlers     and can be used for persistent data (like DB connections)   - RouteM monad that makes it easy to compose an application@@ -99,4 +100,5 @@ * 0.5.1 : Bumped dependency upper bounds to allow text 1.* * 0.6.0 : Removed dependency on yesod-routes. Updated code to compile with wai-3 and ghc-7.8, ghc-7.10 * 0.6.1 : Fixed cabal and travis files+* 0.6.2 : Added 'maybeRoute' and 'routeAttrSet', to get information about the currently executing route 
examples/Example.hs view
@@ -33,7 +33,7 @@  -- Make MyRoute Routable mkRoute "MyRoute" [parseRoutes|-/             HomeR            GET+/             HomeR !hello     GET /users        UsersR           GET /user/#Int    UserR:     /              UserRootR   GET@@ -53,6 +53,10 @@ -- Display the possible actions getHomeR :: Handler MyRoute getHomeR = runHandlerM $ do+  mroute <- maybeRoute+  attrs <- routeAttrSet+  liftIO $ putStrLn $ show mroute+  liftIO $ putStrLn $ show attrs   json $ M.fromList (                  [("description", [["Simple User database Example"]])                  ,("links"
src/Network/Wai/Middleware/Routes.hs view
@@ -52,6 +52,8 @@     , HandlerM()     , runHandlerM            -- | Run a HandlerM to get a Handler     , request                -- | Access the request data+    , maybeRoute             -- | Access the current route+    , routeAttrSet           -- | Access the current route attributes as a set     , master                 -- | Access the master datatype     , header                 -- | Add a header to the response     , status                 -- | Set the response status
src/Network/Wai/Middleware/Routes/Handler.hs view
@@ -14,6 +14,8 @@     ( HandlerM()             -- | A Monad that makes it easier to build a Handler     , runHandlerM            -- | Run a HandlerM to get a Handler     , request                -- | Access the request data+    , routeAttrSet           -- | Access the route attribute list+    , maybeRoute             -- | Access the route data     , master                 -- | Access the master datatype     , header                 -- | Add a header to the response     , status                 -- | Set the response status@@ -25,15 +27,17 @@     )     where -import Network.Wai (Request, Response, responseBuilder)+import Network.Wai (Request, Response, responseBuilder, pathInfo, queryString) import Control.Monad (liftM) import Control.Monad.State (StateT, get, put, modify, runStateT, MonadState, MonadIO, lift, MonadTrans)  import Control.Applicative (Applicative) -import Network.Wai.Middleware.Routes.Routes (RequestData, Handler, waiReq, runNext, ResponseHandler)+import Network.Wai.Middleware.Routes.Routes (RequestData, Handler, waiReq, currentRoute, runNext, ResponseHandler)+import Network.Wai.Middleware.Routes.Class (Route, RouteAttrs(..)) import Network.Wai.Middleware.Routes.ContentTypes (contentType, typeHtml, typeJson, typePlain) +import Data.Maybe (maybe) import Data.ByteString (ByteString) import qualified Data.ByteString.Lazy as BL import Network.HTTP.Types.Header (HeaderName())@@ -42,9 +46,13 @@ import Data.Aeson (ToJSON) import qualified Data.Aeson as A +import Data.Set (Set)+import qualified Data.Set as S (empty, map)+ import Data.Text.Lazy (Text) import qualified Data.Text.Lazy as T import Data.Text.Lazy.Encoding (encodeUtf8)+import Data.Text.Encoding (decodeUtf8)  import Blaze.ByteString.Builder (fromLazyByteString) @@ -59,7 +67,7 @@ -- | The state kept in a HandlerM Monad data HandlerState master = HandlerState                 { getMaster      :: master-                , getRequestData :: RequestData+                , getRequestData :: RequestData master                 , respHeaders    :: [(HeaderName, ByteString)]                 , respStatus     :: Status                 , respBody       :: BL.ByteString@@ -84,6 +92,14 @@ -- | Get the request request :: HandlerM master Request request = liftM (waiReq . getRequestData) get++-- | Get the current route+maybeRoute :: HandlerM master (Maybe (Route master))+maybeRoute = liftM (currentRoute . getRequestData) get++-- | Get the current route attributes+routeAttrSet :: RouteAttrs master => HandlerM master (Set Text)+routeAttrSet = liftM (S.map T.fromStrict . maybe S.empty routeAttrs . currentRoute . getRequestData) get  -- | Add a header to the application response -- TODO: Differentiate between setting and adding headers
src/Network/Wai/Middleware/Routes/Routes.hs view
@@ -48,6 +48,7 @@     , RequestData            -- | An abstract representation of the request data. You can get the wai request object by using `waiReq`     , waiReq                 -- | Extract the wai `Request` object from `RequestData`     , nextApp                -- | Extract the next Application in the stack+    , currentRoute           -- | Extract the current `Route` from `RequestData`     , runNext                -- | Run the next application in the stack      )@@ -78,20 +79,23 @@ import Network.Wai.Middleware.Routes.ContentTypes  -- An abstract request-data RequestData = RequestData+data RequestData master = RequestData   { waiReq  :: Request   , nextApp :: Application+  , currentRoute :: Maybe (Route master)   }  -- AJ: Experimental type ResponseHandler = (Response -> IO ResponseReceived) -> IO ResponseReceived +type App master = RequestData master -> ResponseHandler+ -- | Run the next application in the stack-runNext :: RequestData -> ResponseHandler+runNext :: App master runNext req = nextApp req $ waiReq req  -- | A `Handler` generates an App from the master datatype-type Handler master = master -> RequestData -> ResponseHandler+type Handler master = master -> App master  -- Baked in applications that handle 404 and 405 errors -- TODO: Inspect the request to figure out acceptable output formats@@ -137,8 +141,8 @@     :: Handler master     -> master     -> Maybe (Route master)-    -> RequestData -> ResponseHandler -- App-runHandler h master _ = h master+    -> App master+runHandler h master route reqdata = h master reqdata{currentRoute=route}  -- | A `Routable` instance can be used in dispatching. --   An appropriate instance for your site datatype is@@ -148,7 +152,8 @@  -- | Generates the application middleware from a `Routable` master datatype routeDispatch :: Routable master => master -> Middleware-routeDispatch master def req = dispatcher master RequestData{waiReq=req, nextApp=def}+-- Route information is filled in by runHandler+routeDispatch master def req = dispatcher master RequestData{waiReq=req, nextApp=def, currentRoute=Nothing}  -- | Renders a `Route` as Text showRoute :: RenderRoute master => Route master -> Text
wai-routes.cabal view
@@ -1,5 +1,5 @@ name          : wai-routes-version       : 0.6.1+version       : 0.6.2 cabal-version : >=1.18 build-type    : Simple license       : MIT@@ -63,8 +63,8 @@  source-repository this     type     : git-    location : http://github.com/ajnsit/wai-routes/tree/v0.6.1-    tag      : v0.6.1+    location : http://github.com/ajnsit/wai-routes/tree/v0.6.2+    tag      : v0.6.2  library     build-depends: base             >= 4.7  && < 4.9