wai-extra 3.0.19.1 → 3.0.20.0
raw patch · 5 files changed
+48/−23 lines, 5 files
Files
- ChangeLog.md +4/−0
- Network/Wai/Middleware/MethodOverride.hs +4/−5
- Network/Wai/Test.hs +3/−17
- Network/Wai/Test/Internal.hs +35/−0
- wai-extra.cabal +2/−1
ChangeLog.md view
@@ -1,3 +1,7 @@+## 3.0.20.0++* runSessionWith (runSession variant that gives access to ClientState) [#629](https://github.com/yesodweb/wai/pull/629)+ ## 3.0.19.1 * All loggers follow the autoFlush setting [#604](https://github.com/yesodweb/wai/pull/604)
Network/Wai/Middleware/MethodOverride.hs view
@@ -5,12 +5,11 @@ import Network.Wai import Control.Monad (join) --- | Allows overriding of the HTTP request method via the _method query string--- parameter.+-- | Overriding of HTTP request method via `_method` query string parameter. ----- This middleware only applies when the initial request method is POST. This--- allow submitting of normal HTML forms, without worries of semantics--- mismatches in the HTTP spec.+-- This middleware only applies when the initial request method is POST.+-- Allows submitting of normal HTML forms, without worries of semantic+-- mismatches with the HTTP spec. methodOverride :: Middleware methodOverride app req = app req'
Network/Wai/Test.hs view
@@ -39,15 +39,15 @@ import Network.Wai import Network.Wai.Internal (ResponseReceived (ResponseReceived))+import Network.Wai.Test.Internal import Control.Monad.IO.Class (liftIO) import Control.Monad.Trans.Class (lift) import qualified Control.Monad.Trans.State as ST-import Control.Monad.Trans.Reader (ReaderT, runReaderT, ask)+import Control.Monad.Trans.Reader (runReaderT, ask) import Control.Monad (unless) import Control.DeepSeq (deepseq) import Control.Exception (throwIO, Exception) import Data.Typeable (Typeable)-import Data.Map (Map) import qualified Data.Map as Map import qualified Web.Cookie as Cookie import Data.ByteString (ByteString)@@ -64,20 +64,9 @@ import Data.IORef import Data.Time.Clock (getCurrentTime) -type Session = ReaderT Application (ST.StateT ClientState IO)- -- | -- -- Since 3.0.6-type ClientCookies = Map ByteString Cookie.SetCookie--data ClientState = ClientState- { clientCookies :: ClientCookies- }---- |------ Since 3.0.6 getClientCookies :: Session ClientCookies getClientCookies = clientCookies <$> lift ST.get @@ -104,9 +93,7 @@ modifyClientCookies (Map.delete cookieName) -initState :: ClientState-initState = ClientState Map.empty-+-- | See also: 'runSessionWith'. runSession :: Session a -> Application -> IO a runSession session app = ST.evalStateT (runReaderT session app) initState @@ -337,4 +324,3 @@ ] ) (Cookie.setCookieValue c == cookieValue)-
+ Network/Wai/Test/Internal.hs view
@@ -0,0 +1,35 @@+module Network.Wai.Test.Internal where++import Network.Wai+import qualified Control.Monad.Trans.State as ST+import Control.Monad.Trans.Reader (ReaderT, runReaderT)+import Data.Map (Map)+import qualified Data.Map as Map+import qualified Web.Cookie as Cookie+import Data.ByteString (ByteString)++type Session = ReaderT Application (ST.StateT ClientState IO)++-- |+--+-- Since 3.0.6+type ClientCookies = Map ByteString Cookie.SetCookie++data ClientState = ClientState+ { clientCookies :: ClientCookies+ }++-- |+--+-- Since 3.0.20.0+initState :: ClientState+initState = ClientState Map.empty++-- | Like 'runSession', but if allows you to hand in cookies and get+-- the updated cookies back. One use case for this is writing tests+-- that address the application under test alternatingly through rest+-- api and through db handle.+--+-- Since 3.0.20.0+runSessionWith :: ClientState -> Session a -> Application -> IO (a, ClientState)+runSessionWith st session app = ST.runStateT (runReaderT session app) st
wai-extra.cabal view
@@ -1,5 +1,5 @@ Name: wai-extra-Version: 3.0.19.1+Version: 3.0.20.0 Synopsis: Provides some basic WAI handlers and middleware. description: Provides basic WAI handler and middleware functionality:@@ -148,6 +148,7 @@ Network.Wai.Request Network.Wai.UrlMap Network.Wai.Test+ Network.Wai.Test.Internal Network.Wai.EventSource Network.Wai.EventSource.EventStream other-modules: Network.Wai.Middleware.RequestLogger.Internal