apiary-persistent 1.2.1 → 1.3.0
raw patch · 2 files changed
+25/−17 lines, 2 filesdep +web-routingdep −persistent-sqlitedep ~apiarydep ~apiary-loggerPVP ok
version bump matches the API change (PVP)
Dependencies added: web-routing
Dependencies removed: persistent-sqlite
Dependency ranges changed: apiary, apiary-logger
API changes (from Hackage documentation)
- Web.Apiary.Database.Persist: instance (Has Persist es, MonadExts es m, MonadBaseControl IO m) => RunSQL m
- Web.Apiary.Database.Persist: instance Extension Persist
+ Web.Apiary.Database.Persist: class RunSQL m
+ Web.Apiary.Database.Persist: instance [overlap ok] (Has Persist es, MonadExts es m, MonadBaseControl IO m) => RunSQL m
+ Web.Apiary.Database.Persist: instance [overlap ok] Extension Persist
+ Web.Apiary.Database.Persist: instance [overlap ok] MonadBaseControl IO m => RunSQL (ReaderT Persist m)
- Web.Apiary.Database.Persist: sql :: (KnownSymbol k, Has Persist exts, MonadBaseControl IO actM, NotMember k prms) => Maybe Html -> proxy k -> SqlPersistT (ActionT exts prms actM) a -> (a -> Maybe b) -> ApiaryT exts ((k := b) : prms) actM m () -> ApiaryT exts prms actM m ()
+ Web.Apiary.Database.Persist: sql :: (KnownSymbol k, Has Persist exts, MonadBaseControl IO actM, k </ prms) => Maybe Html -> proxy k -> SqlPersistT (ActionT exts [] actM) a -> (a -> Maybe b) -> Filter exts actM m prms ((k := b) : prms)
Files
apiary-persistent.cabal view
@@ -1,5 +1,5 @@ name: apiary-persistent-version: 1.2.1+version: 1.3.0 synopsis: persistent support for apiary web framework. description: example: <https://github.com/philopon/apiary/blob/master/examples/persistent.hs>@@ -9,7 +9,7 @@ maintainer: HirotomoMoriwaki<philopon.dependence@gmail.com> Homepage: https://github.com/philopon/apiary Bug-reports: https://github.com/philopon/apiary/issues-copyright: (c) 2014 Hirotomo Moriwaki+copyright: (c) 2014-2015 Hirotomo Moriwaki category: Web build-type: Simple stability: stable@@ -21,8 +21,8 @@ build-depends: base >=4.6 && <4.8 , persistent >=2.1 && <2.2 - , apiary >=1.2 && <1.3- , apiary-logger >=1.2 && <1.3+ , apiary >=1.3 && <1.4+ , apiary-logger >=1.3 && <1.4 , resourcet >=1.1 && <1.2 , resource-pool >=0.2 && <0.3@@ -31,7 +31,7 @@ , transformers >=0.2 && <0.5 , transformers-base >=0.4 && <0.5 , monad-control >=0.3 && <1.1- , persistent-sqlite+ , web-routing hs-source-dirs: src ghc-options: -O2 -Wall default-language: Haskell2010
src/Web/Apiary/Database/Persist.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE OverlappingInstances #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeOperators #-}@@ -16,7 +17,7 @@ -- ** low level , initPersist', initPersistPool' -- * query- , runSql+ , RunSQL(runSql) -- * filter , sql ) where@@ -25,17 +26,17 @@ import Control.Monad(void, mzero) import Control.Monad.IO.Class(MonadIO(..)) import Control.Monad.Logger(NoLoggingT(runNoLoggingT))-import Control.Monad.Trans.Reader(runReaderT)+import Control.Monad.Trans.Reader(ReaderT(..), runReaderT, ask) import Control.Monad.Trans.Control(MonadBaseControl) import Web.Apiary.Logger(LogWrapper, runLogWrapper) import qualified Database.Persist.Sql as Sql import Web.Apiary(Html)-import Control.Monad.Apiary(ApiaryT)-import Control.Monad.Apiary.Action(ActionT, getParams)-import Control.Monad.Apiary.Filter(focus, Doc(DocPrecondition))-import qualified Data.Apiary.Dict as Dict+import Control.Monad.Apiary.Action(ActionT, applyDict)+import Control.Monad.Apiary.Filter(focus, Filter, Doc(DocPrecondition))+import qualified Network.Routing.Dict as Dict+import qualified Network.Routing as R import Data.Apiary.Compat(Proxy(..), KnownSymbol) import Data.Apiary.Extension (Has, Initializer, initializer, Extensions, Extension, MonadExts, getExt)@@ -116,14 +117,21 @@ instance (Has Persist es, MonadExts es m, MonadBaseControl IO m) => RunSQL m where runSql a = getExt (Proxy :: Proxy Persist) >>= runSql' a +instance (MonadBaseControl IO m) => RunSQL (ReaderT Persist m) where+ runSql a = ask >>= runSql' a+ -- | filter by sql query. since 0.9.0.0.-sql :: (KnownSymbol k, Has Persist exts, MonadBaseControl IO actM, Dict.NotMember k prms)+sql :: (KnownSymbol k, Has Persist exts, MonadBaseControl IO actM, k Dict.</ prms) => Maybe Html -- ^ documentation. -> proxy k- -> Sql.SqlPersistT (ActionT exts prms actM) a+ -> Sql.SqlPersistT (ActionT exts '[] actM) a -> (a -> Maybe b) -- ^ result check function. Nothing: fail filter, Just a: success filter and add parameter.- -> ApiaryT exts (k Dict.:= b ': prms) actM m () -> ApiaryT exts prms actM m ()-sql doc k q p = focus (maybe id DocPrecondition doc) $ do- fmap p (runSql q) >>= \case+ -> Filter exts actM m prms (k Dict.:= b ': prms)+sql doc k q p = focus (maybe id DocPrecondition doc) Nothing $ R.raw "sql" $ \d t ->+ fmap p (runSql $ hoistReaderT (applyDict Dict.emptyDict) q) >>= \case Nothing -> mzero- Just a -> Dict.insert k a `fmap` getParams+ Just a -> return (Dict.add k a d, t)++hoistReaderT :: (forall b. m b -> n b) -> ReaderT r m a -> ReaderT r n a+hoistReaderT f m = ReaderT $ \b -> f (runReaderT m b)+{-# INLINE hoistReaderT #-}