packages feed

persistent-database-url 1.0.0 → 1.1.0

raw patch · 2 files changed

+23/−16 lines, 2 filesdep +string-conversionsdep +textdep ~uri-bytestringnew-uploader

Dependencies added: string-conversions, text

Dependency ranges changed: uri-bytestring

Files

persistent-database-url.cabal view
@@ -1,5 +1,5 @@ name:                   persistent-database-url-version:                1.0.0+version:                1.1.0 author:                 Joe Ferris <jferris@thoughtbot.com> maintainer:             Joe Ferris <jferris@thoughtbot.com> license:                MIT@@ -24,8 +24,10 @@   build-depends:        base >= 4 && < 5                       , bytestring                       , persistent-postgresql >= 1.0.0-                      , uri-bytestring+                      , uri-bytestring < 0.2.0                       , fail+                      , string-conversions+                      , text  test-suite spec   type:                 exitcode-stdio-1.0@@ -37,6 +39,8 @@                       , hspec                       , persistent-database-url                       , persistent-postgresql+                      , bytestring+                      , text  source-repository head   type:                 git
src/Database/Persist/URL.hs view
@@ -1,12 +1,14 @@+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} module Database.Persist.URL     ( fromDatabaseUrl     ) where -import Control.Monad (unless)-import Control.Monad.Fail (MonadFail)+import Control.Monad (MonadPlus, mzero, unless) import Data.ByteString (ByteString, uncons) import Data.Monoid ((<>))+import Data.String.Conversions (ConvertibleStrings(..))+import Data.String.Conversions.Monomorphic (toStrictByteString) import Database.Persist.Postgresql (PostgresConf(..)) import URI.ByteString     ( Authority(..)@@ -22,15 +24,16 @@ import qualified Data.ByteString.Char8 as Char8  -- | Build a @'PostgresConf'@ by parsing a database URL String-fromDatabaseUrl :: MonadFail m => Int -> ByteString -> m PostgresConf+fromDatabaseUrl+    :: (MonadPlus m, ConvertibleStrings s ByteString)+    => Int -> s -> m PostgresConf fromDatabaseUrl size url = do-    uri <- abortLeft $ parseURI strictURIParserOptions url-    auth <- abortNothing "authority" $ uriAuthority uri-    userInfo <- abortNothing "user info" $ authorityUserInfo auth-    port <- abortNothing "port" $ authorityPort auth-    dbName <- abortNothing "path" $ snd <$> uncons (uriPath uri)-    unless (schemeBS (uriScheme uri) == "postgres") $-        fail "DATABASE_URL has unknown scheme"+    uri <- abortLeft $ parseURI strictURIParserOptions $ toStrictByteString url+    auth <- abortNothing $ uriAuthority uri+    userInfo <- abortNothing $ authorityUserInfo auth+    port <- abortNothing $ authorityPort auth+    dbName <- abortNothing $ snd <$> uncons (uriPath uri)+    unless (schemeBS (uriScheme uri) == "postgres") mzero      return PostgresConf         { pgConnStr =@@ -42,8 +45,8 @@         , pgPoolSize = size         } -abortLeft :: (MonadFail m, Show e) => Either e b -> m b-abortLeft = either (fail . ("DATABASE_URL failed to parse: " <>) . show) return+abortLeft :: (MonadPlus m, Show e) => Either e b -> m b+abortLeft = either (const mzero) return -abortNothing :: MonadFail m => String -> Maybe a -> m a-abortNothing s = maybe (fail $ "DATABASE_URL is missing " <> s) return+abortNothing :: MonadPlus m => Maybe a -> m a+abortNothing = maybe mzero return