pg-harness-client 0.3.0 → 0.3.1
raw patch · 3 files changed
+83/−83 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.PostgreSQL.Harness.Client: ConnectionInformation :: String -> String -> String -> String -> String -> ConnectionInformation
- Data.PostgreSQL.Harness.Client: ciDatabaseName :: ConnectionInformation -> String
- Data.PostgreSQL.Harness.Client: ciHost :: ConnectionInformation -> String
- Data.PostgreSQL.Harness.Client: ciPassword :: ConnectionInformation -> String
- Data.PostgreSQL.Harness.Client: ciPort :: ConnectionInformation -> String
- Data.PostgreSQL.Harness.Client: ciUser :: ConnectionInformation -> String
- Data.PostgreSQL.Harness.Client: createTemporaryDatabase :: String -> IO ConnectionInformation
- Data.PostgreSQL.Harness.Client: data ConnectionInformation
- Data.PostgreSQL.Harness.Client: toConnectionString :: ConnectionInformation -> ByteString
+ Database.PostgreSQL.Harness.Client: ConnectionInformation :: String -> String -> String -> String -> String -> ConnectionInformation
+ Database.PostgreSQL.Harness.Client: ciDatabaseName :: ConnectionInformation -> String
+ Database.PostgreSQL.Harness.Client: ciHost :: ConnectionInformation -> String
+ Database.PostgreSQL.Harness.Client: ciPassword :: ConnectionInformation -> String
+ Database.PostgreSQL.Harness.Client: ciPort :: ConnectionInformation -> String
+ Database.PostgreSQL.Harness.Client: ciUser :: ConnectionInformation -> String
+ Database.PostgreSQL.Harness.Client: createTemporaryDatabase :: String -> IO ConnectionInformation
+ Database.PostgreSQL.Harness.Client: data ConnectionInformation
+ Database.PostgreSQL.Harness.Client: toConnectionString :: ConnectionInformation -> ByteString
Files
- pg-harness-client.cabal +2/−2
- src/Data/PostgreSQL/Harness/Client.hs +0/−81
- src/Database/PostgreSQL/Harness/Client.hs +81/−0
pg-harness-client.cabal view
@@ -1,5 +1,5 @@ Name: pg-harness-client-Version: 0.3.0+Version: 0.3.1 Synopsis: Client library for pg-harness-server Description: Client library for <https://hackage.haskell.org/package/pg-harness-server pg-harness-server>@@ -25,4 +25,4 @@ Default-language: Haskell2010 Ghc-options: -Wall Hs-source-dirs: src- Exposed-modules: Data.PostgreSQL.Harness.Client+ Exposed-modules: Database.PostgreSQL.Harness.Client
− src/Data/PostgreSQL/Harness/Client.hs
@@ -1,81 +0,0 @@-{-- 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
+ src/Database/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 Database.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