heroku 0.1.2.2 → 0.1.2.3
raw patch · 4 files changed
+58/−7 lines, 4 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Web.Heroku.RabbitMQ: AmqpSettings :: !String -> !Text -> !Text -> !Text -> !Int -> AmqpSettings
+ Web.Heroku.RabbitMQ: amqpConnSettings :: IO AmqpSettings
+ Web.Heroku.RabbitMQ: amqpHostName :: AmqpSettings -> !String
+ Web.Heroku.RabbitMQ: amqpPass :: AmqpSettings -> !Text
+ Web.Heroku.RabbitMQ: amqpPort :: AmqpSettings -> !Int
+ Web.Heroku.RabbitMQ: amqpUser :: AmqpSettings -> !Text
+ Web.Heroku.RabbitMQ: amqpVirtualHost :: AmqpSettings -> !Text
+ Web.Heroku.RabbitMQ: data AmqpSettings
+ Web.Heroku.RabbitMQ: instance Eq AmqpSettings
+ Web.Heroku.RabbitMQ: instance Show AmqpSettings
+ Web.Heroku.RabbitMQ: parseAmqpUrl :: String -> AmqpSettings
Files
- Web/Heroku.hs +0/−4
- Web/Heroku/RabbitMQ.hs +42/−0
- heroku.cabal +2/−1
- test.hs +14/−2
Web/Heroku.hs view
@@ -3,8 +3,4 @@ , parseDatabaseUrl ) where -import System.Environment-import Network.URI-import Data.Text-import Prelude import Web.Heroku.Postgres (dbConnParams, parseDatabaseUrl)
+ Web/Heroku/RabbitMQ.hs view
@@ -0,0 +1,42 @@+module Web.Heroku.RabbitMQ + ( AmqpSettings(..)+ , amqpConnSettings+ , parseAmqpUrl+ ) where++import Control.Monad+import Data.Text ( Text, pack )+import System.Environment++data AmqpSettings = AmqpSettings+ { amqpHostName :: !String+ , amqpVirtualHost :: !Text+ , amqpUser :: !Text+ , amqpPass :: !Text+ , amqpPort :: !Int + } deriving (Show, Eq)++amqpConnSettings :: IO AmqpSettings+amqpConnSettings = liftM parseAmqpUrl (getEnv "RABBITMQ_BIGWIG_URL")++parseAmqpUrl :: String -> AmqpSettings+parseAmqpUrl = parse . pieces "" [] . trimProtocol+ where+ parse :: [String] -> AmqpSettings+ parse [ user+ , pass+ , host+ , port+ , vhst + ] = AmqpSettings host (pack vhst) (pack user) (pack pass) (read port)+ parse _ = error "Unexpected environment variable format."++ trimProtocol :: String -> String+ trimProtocol ('a':'m':'q':'p':':':'/':'/':rest) = rest+ trimProtocol str = str++ pieces acc ys [] = reverse (reverse acc:ys)+ pieces acc ys (x:xs) + | x `elem` "@:/" = pieces "" (reverse acc:ys) xs + | otherwise = pieces (x:acc) ys xs +
heroku.cabal view
@@ -1,5 +1,5 @@ Name: heroku-Version: 0.1.2.2+Version: 0.1.2.3 Synopsis: helpers for deploying to Heroku Description: currently just a parser for DATABASE_URL Homepage: https://github.com/gregwebs/haskell-heroku@@ -17,6 +17,7 @@ Exposed-modules: Web.Heroku , Web.Heroku.Postgres , Web.Heroku.MongoDB+ , Web.Heroku.RabbitMQ Other-modules: Web.Heroku.Internal
test.hs view
@@ -1,11 +1,12 @@ {-# LANGUAGE OverloadedStrings #-} module Main where -import Web.Heroku import Test.Hspec+import Web.Heroku+import Web.Heroku.RabbitMQ main :: IO ()-main = hspec $+main = hspec $ do describe "parseDatabaseUrl" $ it "extracts individual items" $ parseDatabaseUrl "postgres://db:pass@ec2-1-1-1-1.compute-1.amazonaws.com:1234/db" `shouldBe`@@ -15,3 +16,14 @@ , ("port","1234") , ("dbname","db") ]+ describe "parseAmqpUrl" $+ it "extracts amqp connection settings" $+ parseAmqpUrl "amqp://ebA3ec8f:54EnktG1MgGvwPftC4y7BfZIQTYqrtvD@massive-scale-12.bigwig.lshift.net:10210/Uao4j39t8qD_" `shouldBe`+ AmqpSettings+ { amqpHostName = "massive-scale-12.bigwig.lshift.net"+ , amqpVirtualHost = "Uao4j39t8qD_"+ , amqpUser = "ebA3ec8f"+ , amqpPass = "54EnktG1MgGvwPftC4y7BfZIQTYqrtvD"+ , amqpPort = 10210+ }+