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 +25/−0
- Setup.hs +2/−0
- pg-harness-client.cabal +28/−0
- src/Data/PostgreSQL/Harness/Client.hs +81/−0
+ 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