yesod-core 1.2.7 → 1.2.8
raw patch · 4 files changed
+36/−11 lines, 4 files
Files
- Yesod/Core/Handler.hs +29/−9
- test/YesodCoreTest.hs +5/−0
- test/YesodCoreTest/Json.hs +1/−1
- yesod-core.cabal +1/−1
Yesod/Core/Handler.hs view
@@ -137,6 +137,7 @@ , newIdent -- * Lifting , handlerToIO+ , forkHandler -- * i18n , getMessageRender -- * Per-request caching@@ -149,18 +150,17 @@ mkFileInfoLBS, mkFileInfoSource) import Control.Applicative ((<$>), (<|>))-import Control.Exception (evaluate)+import Control.Exception (evaluate, SomeException)+import Control.Exception.Lifted (handle) -import Control.Monad (liftM)+import Control.Monad (liftM, void) import qualified Control.Monad.Trans.Writer as Writer import Control.Monad.IO.Class (MonadIO, liftIO)-import Control.Monad.Trans.Resource (MonadResource, liftResourceT, InternalState) import qualified Network.HTTP.Types as H import qualified Network.Wai as W import Control.Monad.Trans.Class (lift)-import Data.Conduit (transPipe, Flush (Flush), yield, Producer) import qualified Data.Text as T import Data.Text.Encoding (decodeUtf8With, encodeUtf8)@@ -173,10 +173,8 @@ import qualified Data.ByteString.Lazy as L import qualified Data.Map as Map -import Data.Conduit (Source, Sink) import Control.Arrow ((***)) import qualified Data.ByteString.Char8 as S8-import Data.Maybe (mapMaybe) import Data.Monoid (Endo (..), mappend, mempty) import Data.Text (Text) import qualified Network.Wai.Parse as NWP@@ -186,10 +184,9 @@ import Yesod.Core.Internal.Util (formatRFC1123) import Text.Blaze.Html (preEscapedToMarkup, toHtml) -import Control.Monad.Trans.Resource (ResourceT, runResourceT, withInternalState, getInternalState, liftResourceT) import Data.Dynamic (fromDynamic, toDyn) import qualified Data.IORef.Lifted as I-import Data.Maybe (listToMaybe)+import Data.Maybe (listToMaybe, mapMaybe) import Data.Typeable (Typeable, typeOf) import Yesod.Core.Class.Handler import Yesod.Core.Types@@ -198,12 +195,23 @@ import Blaze.ByteString.Builder (Builder) import Safe (headMay) import Data.CaseInsensitive (CI)+import Control.Monad.Trans.Resource (MonadResource, InternalState, runResourceT, withInternalState, getInternalState, liftResourceT, resourceForkIO #if MIN_VERSION_wai(2, 0, 0)+#else+ , ResourceT+#endif+ )+#if MIN_VERSION_wai(2, 0, 0) import qualified System.PosixCompat.Files as PC #endif #if MIN_VERSION_wai(2, 1, 0)-import Control.Monad.Trans.Control (MonadBaseControl, control)+import Control.Monad.Trans.Control (control, MonadBaseControl) #endif+import Data.Conduit (Source, transPipe, Flush (Flush), yield, Producer+#if MIN_VERSION_wai(2, 1, 0)+ , Sink+#endif+ ) get :: MonadHandler m => m GHState get = liftHandlerT $ HandlerT $ I.readIORef . handlerState@@ -388,6 +396,18 @@ } liftIO (f newHandlerData) +-- | forkIO for a Handler (run an action in the background)+--+-- Uses 'handlerToIO', liftResourceT, and resourceForkIO+-- for correctness and efficiency+--+-- Since 1.2.8+forkHandler :: (SomeException -> HandlerT site IO ()) -- ^ error handler+ -> HandlerT site IO ()+ -> HandlerT site IO ()+forkHandler onErr handler = do+ yesRunner <- handlerToIO+ void $ liftResourceT $ resourceForkIO $ yesRunner $ handle onErr handler -- | Redirect to the given route. -- HTTP status code 303 for HTTP 1.1 clients and 302 for HTTP 1.0
test/YesodCoreTest.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} module YesodCoreTest (specs) where import YesodCoreTest.CleanPath@@ -14,7 +15,9 @@ import qualified YesodCoreTest.JsLoader as JsLoader import qualified YesodCoreTest.RequestBodySize as RequestBodySize import qualified YesodCoreTest.Json as Json+#if MIN_VERSION_wai(2, 1, 0) import qualified YesodCoreTest.RawResponse as RawResponse+#endif import qualified YesodCoreTest.Streaming as Streaming import qualified YesodCoreTest.Reps as Reps import qualified YesodCoreTest.Auth as Auth@@ -38,7 +41,9 @@ JsLoader.specs RequestBodySize.specs Json.specs+#if MIN_VERSION_wai(2, 1, 0) RawResponse.specs+#endif Streaming.specs Reps.specs Auth.specs
test/YesodCoreTest/Json.hs view
@@ -19,7 +19,7 @@ getHomeR :: Handler RepPlain getHomeR = do- val <- parseJsonBody_+ val <- requireJsonBody case Map.lookup ("foo" :: Text) val of Nothing -> invalidArgs ["foo not found"] Just foo -> return $ RepPlain $ toContent (foo :: Text)
yesod-core.cabal view
@@ -1,5 +1,5 @@ name: yesod-core-version: 1.2.7+version: 1.2.8 license: MIT license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>