From 05f2a7631cfe25a3f812c7f93223d2a491d43a52 Mon Sep 17 00:00:00 2001 From: Greg Weber Date: Sat, 29 Nov 2014 17:44:33 -0800 Subject: [PATCH] add Yesod.Core.Unsafe module --- yesod-core/Yesod/Core.hs | 14 ++++++++++++-- yesod-core/Yesod/Core/Internal/Run.hs | 1 - yesod-core/Yesod/Core/Unsafe.hs | 23 +++++++++++++++++++++++ yesod-core/yesod-core.cabal | 3 ++- 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 yesod-core/Yesod/Core/Unsafe.hs diff --git a/yesod-core/Yesod/Core.hs b/yesod-core/Yesod/Core.hs index 1f8d3d25..afd5235e 100644 --- a/yesod-core/Yesod/Core.hs +++ b/yesod-core/Yesod/Core.hs @@ -61,7 +61,7 @@ module Yesod.Core -- * Misc , yesodVersion , yesodRender - , runFakeHandler + , Yesod.Core.runFakeHandler -- * LiteApp , module Yesod.Core.Internal.LiteApp -- * Low-level @@ -121,7 +121,8 @@ import Yesod.Core.Internal.Run (yesodRunner) import Yesod.Core.Class.Yesod import Yesod.Core.Class.Dispatch import Yesod.Core.Class.Breadcrumbs -import Yesod.Core.Internal.Run (yesodRender, runFakeHandler) +import Yesod.Core.Internal.Run (yesodRender) +import qualified Yesod.Core.Internal.Run import qualified Paths_yesod_core import Data.Version (showVersion) import Yesod.Routes.Class @@ -137,6 +138,15 @@ import Text.Lucius import Text.Julius import Network.Wai (Application) +runFakeHandler :: (Yesod site, MonadIO m) => + SessionMap + -> (site -> Logger) + -> site + -> HandlerT site IO a + -> m (Either ErrorResponse a) +runFakeHandler = Yesod.Core.Internal.Run.runFakeHandler +{-# DEPRECATED runFakeHandler "import runFakeHandler from Yesod.Core.Unsafe" #-} + -- | Return an 'Unauthorized' value, with the given i18n message. unauthorizedI :: (MonadHandler m, RenderMessage (HandlerSite m) msg) => msg -> m AuthResult unauthorizedI msg = do diff --git a/yesod-core/Yesod/Core/Internal/Run.hs b/yesod-core/Yesod/Core/Internal/Run.hs index bf2cf08e..651c11ca 100644 --- a/yesod-core/Yesod/Core/Internal/Run.hs +++ b/yesod-core/Yesod/Core/Internal/Run.hs @@ -247,7 +247,6 @@ runFakeHandler fakeSessionMap logger site handler = liftIO $ do } _ <- runResourceT $ yapp fakeRequest I.readIORef ret -{-# WARNING runFakeHandler "Usually you should *not* use runFakeHandler unless you really understand how it works and why you need it." #-} yesodRunner :: (ToTypedContent res, Yesod site) => HandlerT site IO res diff --git a/yesod-core/Yesod/Core/Unsafe.hs b/yesod-core/Yesod/Core/Unsafe.hs new file mode 100644 index 00000000..4296752b --- /dev/null +++ b/yesod-core/Yesod/Core/Unsafe.hs @@ -0,0 +1,23 @@ +-- | This is designed to be used as +-- +-- > qualifyed import Yesod.Core.Unsafe as Unsafe +-- +-- This serves as a reminder that the functions are unsafe to use in many situations. +module Yesod.Core.Unsafe (runFakeHandler, fakeHandlerGetLogger) where + +import Yesod.Core.Internal.Run (runFakeHandler) + +import Yesod.Core.Types +import Yesod.Core.Class.Yesod +import Data.Monoid (mempty, mappend) +import Control.Monad.IO.Class (MonadIO) + +-- | designed to be used as +-- +-- > unsafeHandler = Unsafe.fakeHandlerGetLogger appLogger +fakeHandlerGetLogger :: (Yesod site, MonadIO m) + => (site -> Logger) -> site -> HandlerT site IO a -> m a +fakeHandlerGetLogger getLogger app f = + runFakeHandler mempty getLogger app f + >>= either (error . ("runFakeHandler issue: " `mappend`) . show) + return diff --git a/yesod-core/yesod-core.cabal b/yesod-core/yesod-core.cabal index a985397f..98d3d70e 100644 --- a/yesod-core/yesod-core.cabal +++ b/yesod-core/yesod-core.cabal @@ -1,5 +1,5 @@ name: yesod-core -version: 1.4.5 +version: 1.4.6 license: MIT license-file: LICENSE author: Michael Snoyman @@ -77,6 +77,7 @@ library Yesod.Core.Widget Yesod.Core.Internal Yesod.Core.Types + Yesod.Core.Unsafe Yesod.Routes.TH.Types other-modules: Yesod.Core.Internal.Session Yesod.Core.Internal.Request