packages feed

pg-harness-client (empty) → 0.3.0

raw patch · 4 files changed

+136/−0 lines, 4 filesdep +HTTPdep +basedep +bytestringsetup-changed

Dependencies added: HTTP, base, bytestring

Files

+ LICENSE.txt view
@@ -0,0 +1,25 @@+Copyright (c) 2015, Bardur Arantsson+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are+met:++1. Redistributions of source code must retain the above copyright+notice, this list of conditions and the following disclaimer.++2. Redistributions in binary form must reproduce the above copyright+notice, this list of conditions and the following disclaimer in the+documentation and/or other materials provided with the distribution.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ pg-harness-client.cabal view
@@ -0,0 +1,28 @@+Name:                pg-harness-client+Version:             0.3.0+Synopsis:            Client library for pg-harness-server+Description:+  Client library for <https://hackage.haskell.org/package/pg-harness-server pg-harness-server>+  for conveniently creating temporary PostgreSQL databases for use in tests.+License:             BSD2+License-file:        LICENSE.txt+Author:              Bardur Arantsson+Homepage:            https://github.com/BardurArantsson/pg-harness+Maintainer:          bardur@scientician.net+Copyright:           Copyright (c) 2014, 2015 Bardur Arantsson+Category:            Database Testing Web+Build-type:          Simple+Cabal-version:       >=1.10++Source-repository head+  type: git+  location: https://github.com/BardurArantsson/pg-harness.git++Library+  Build-depends:      base == 4.*+                    , bytestring >= 0.9.0.1+                    , HTTP >= 4000.2.17 && < 4001+  Default-language:   Haskell2010+  Ghc-options:        -Wall+  Hs-source-dirs:     src+  Exposed-modules:    Data.PostgreSQL.Harness.Client
+ src/Data/PostgreSQL/Harness/Client.hs view
@@ -0,0 +1,81 @@+{-+    Copyright (c) 2015, Bardur Arantsson+    All rights reserved.++    Redistribution and use in source and binary forms, with or without+    modification, are permitted provided that the following conditions are+    met:++    1. Redistributions of source code must retain the above copyright+    notice, this list of conditions and the following disclaimer.++    2. Redistributions in binary form must reproduce the above copyright+    notice, this list of conditions and the following disclaimer in the+    documentation and/or other materials provided with the distribution.++    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+    HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.+-}+{-|++  Client library for <https://hackage.haskell.org/package/pg-harness-server pg-harness-server>.++  Use the 'createTemporaryDatabase' function to create databases.++-}+module Data.PostgreSQL.Harness.Client+    ( ConnectionInformation(..)+    , createTemporaryDatabase+    , toConnectionString+    ) where++import           Data.ByteString (ByteString)+import qualified Data.ByteString.Char8 as B8+import           Network.HTTP (simpleHTTP, postRequest, getResponseBody)++-- | Connection information to use for connecting to a database.+data ConnectionInformation = ConnectionInformation+    { ciHost :: String+    , ciPort :: String+    , ciDatabaseName :: String+    , ciUser :: String+    , ciPassword :: String+    }++-- | Create temporary database using the given URL to a+-- running @pg-harness-server@ REST service. Returns the connection+-- information for connecting to the newly created temporary+-- database.+createTemporaryDatabase :: String -> IO ConnectionInformation+createTemporaryDatabase url = do+  rsp <- simpleHTTP (postRequest url)+  body <- getResponseBody rsp+  return $ parse body+  where+    parse :: String -> ConnectionInformation+    parse s =+      let (userPass, (_:hostPortDatabase)) = break ((==) '@') s in+      let (user, (_:password)) = break ((==) ':') userPass in+      let (hostPort, (_:databaseName)) = break ((==) '/') hostPortDatabase in+      let (host, (_:port)) = break ((==) ':') hostPort in+        ConnectionInformation host port databaseName user password++-- | Convert connection information to a @libpq@ or+-- @postgresql-simple@ compatible connection string.+toConnectionString :: ConnectionInformation -> ByteString+toConnectionString (ConnectionInformation host port databaseName user password) =+  B8.pack $+    "host=" ++ host ++ " " +++    "port=" ++ port ++ " " +++    "dbname=" ++ databaseName ++ " " +++    "user=" ++ user ++ " " +++    "password=" ++ password