apiary-persistent 0.17.0 → 1.0.0
raw patch · 2 files changed
+26/−26 lines, 2 filesdep ~apiarydep ~apiary-loggerdep ~persistent
Dependency ranges changed: apiary, apiary-logger, persistent
Files
apiary-persistent.cabal view
@@ -1,5 +1,5 @@ name: apiary-persistent-version: 0.17.0+version: 1.0.0 synopsis: persistent support for apiary web framework. description: example: <https://github.com/philopon/apiary/blob/master/examples/persistent.hs>@@ -19,10 +19,10 @@ library exposed-modules: Web.Apiary.Database.Persist build-depends: base >=4.6 && <4.8- , persistent >=2.0 && <2.1+ , persistent >=2.1 && <2.2 - , apiary >=0.17 && <0.18- , apiary-logger >=0.17 && <0.18+ , apiary >=1.0 && <1.1+ , apiary-logger >=1.0 && <1.1 , resourcet >=1.1 && <1.2 , resource-pool >=0.2 && <0.3
src/Web/Apiary/Database/Persist.hs view
@@ -36,12 +36,11 @@ import Web.Apiary import Web.Apiary.Logger-import Data.Apiary.SList-import Data.Apiary.Proxy-import Data.Apiary.Document+import Control.Monad.Apiary.Action+import Control.Monad.Apiary.Filter+import qualified Data.Apiary.Dict as Dict+import Data.Apiary.Compat import Data.Apiary.Extension-import Data.Apiary.Extension.Internal-import Control.Monad.Apiary.Filter.Internal data Migrator = Logging Migration@@ -51,17 +50,17 @@ data Persist = PersistPool ConnectionPool- | PersistConn Connection+ | PersistConn SqlBackend type With c m = forall a. (c -> m a) -> m a -initPersist' :: (MonadIO n, MonadBaseControl IO n) +initPersist' :: (MonadIO n, MonadBaseControl IO n, Monad m) => (forall a. m a -> n a) -> (forall a. Extensions exts -> n a -> m a)- -> With Connection n -> Migrator -> Initializer m exts (Persist ': exts)-initPersist' wrap run with migr = Initializer $ \es m -> run es $+ -> With SqlBackend n -> Migrator -> Initializer m exts (Persist ': exts)+initPersist' wrap run with migr = initializer $ \es -> run es $ with $ \conn -> do doMigration migr conn- wrap $ m (addExtension (PersistConn conn) es)+ wrap $ return (PersistConn conn) -- | construct persist extension initializer with no connection pool. --@@ -71,22 +70,22 @@ -- initPersist (withSqliteConn "db.sqlite") migrateAll -- @ initPersist :: (MonadIO m, MonadBaseControl IO m) - => With Connection (LogWrapper exts m) -> Migration+ => With SqlBackend (LogWrapper exts m) -> Migration -> Initializer m exts (Persist ': exts) initPersist with = initPersist' logWrapper runLogWrapper with . Logging initPersistNoLog :: (MonadIO m, MonadBaseControl IO m) - => With Connection (NoLoggingT m)+ => With SqlBackend (NoLoggingT m) -> Migration -> Initializer m es (Persist ': es) initPersistNoLog with = initPersist' NoLoggingT (const runNoLoggingT) with . Silent -initPersistPool' :: (MonadIO n, MonadBaseControl IO n)+initPersistPool' :: (MonadIO n, MonadBaseControl IO n, Monad m) => (forall a. m a -> n a) -> (forall a. Extensions exts -> n a -> m a) -> With ConnectionPool n -> Migrator -> Initializer m exts (Persist ': exts)-initPersistPool' wrap run with migr = Initializer $ \es m -> run es $+initPersistPool' wrap run with migr = initializer $ \es -> run es $ with $ \pool -> do withResource pool $ doMigration migr- wrap $ m (addExtension (PersistPool pool) es)+ wrap $ return (PersistPool pool) initPersistPool :: (MonadIO m, MonadBaseControl IO m) => With ConnectionPool (LogWrapper exts m) -> Migration@@ -98,7 +97,7 @@ -> Migration -> Initializer m es (Persist ': es) initPersistPoolNoLog with = initPersistPool' NoLoggingT (const runNoLoggingT) with . Silent -doMigration :: (MonadIO m, MonadBaseControl IO m) => Migrator -> Connection -> m ()+doMigration :: (MonadIO m, MonadBaseControl IO m) => Migrator -> SqlBackend -> m () doMigration migr conn = case migr of Logging m -> runReaderT (runMigration m) conn Silent m -> runReaderT (void (runMigrationSilent m)) conn@@ -107,18 +106,19 @@ -- | execute sql in action. runSql :: (Has Persist exts, MonadBaseControl IO m)- => SqlPersistT (ActionT exts m) a -> ActionT exts m a+ => SqlPersistT (ActionT exts prms m) a -> ActionT exts prms m a runSql a = getExt (Proxy :: Proxy Persist) >>= \case PersistPool p -> runSqlPool a p PersistConn c -> runSqlConn a c -- | filter by sql query. since 0.9.0.0.-sql :: (Has Persist exts, MonadBaseControl IO actM)+sql :: (Has Persist exts, MonadBaseControl IO actM, Dict.NotMember k prms) => Maybe Html -- ^ documentation.- -> SqlPersistT (ActionT exts actM) a+ -> proxy k+ -> SqlPersistT (ActionT exts prms actM) a -> (a -> Maybe b) -- ^ result check function. Nothing: fail filter, Just a: success filter and add parameter.- -> ApiaryT exts (b ': prms) actM m () -> ApiaryT exts prms actM m ()-sql doc q p = focus (maybe id DocPrecondition doc) $ \l ->+ -> ApiaryT exts (k := 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 Nothing -> mzero- Just a -> return (a ::: l)+ Just a -> Dict.insert k a `fmap` getParams