packages feed

heroku (empty) → 0.1

raw patch · 4 files changed

+100/−0 lines, 4 filesdep +basedep +networkdep +textsetup-changed

Dependencies added: base, network, text

Files

+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c)2011, Greg Weber++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * 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.++    * Neither the name of Greg Weber nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++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+OWNER 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
+ Web/Heroku.hs view
@@ -0,0 +1,47 @@+module Web.Heroku ( +    dbConnParams +  , parseDatabaseUrl+  ) where++import System.Environment+import Network.URI+import Data.Text+import Prelude++-- | read the DATABASE_URL environment variable+-- and return an alist of connection parameters with the following keys:+-- user, password, host, port, dbname+--+-- warning: just calls error if it can't parse correctly+dbConnParams :: IO [(Text, Text)]+dbConnParams = getEnv "DATABASE_URL" >>= return . parseDatabaseUrl++parseDatabaseUrl :: String -> [(Text, Text)]+parseDatabaseUrl durl =+  let muri = parseAbsoluteURI durl+      (auth, path) = case muri of+                      Nothing ->  error "couldn't parse absolute uri"+                      Just uri -> if uriScheme uri /= "postgres:"+                                    then schemeError uri+                                    else case uriAuthority uri of+                                           Nothing   -> invalid+                                           Just a -> (a, uriPath uri)+      (user,password) = userAndPassword auth+  in     [+          (pack "user",     user)+          -- tail not safe, but should be there on Heroku+         ,(pack "password", Data.Text.tail password)+         ,(pack "host",     pack $ uriRegName auth)+         -- Heroku should use default port+         -- ,(pack "port",     pack $ uriPort auth)+         -- tail not safe but path should always be there+         ,(pack "dbname",   pack $ Prelude.tail $ path)+         ]+  where+    -- init is not safe, but should be there on Heroku+    userAndPassword :: URIAuth -> (Text, Text)+    userAndPassword = (breakOn $ pack ":") . pack . Prelude.init . uriUserInfo++    schemeError uri = error $ "was expecting a postgres scheme, not: " ++ (uriScheme uri) ++ "\n" ++ (show uri)+    -- should be an error +    invalid = error "could not parse heroku DATABASE_URL"
+ heroku.cabal view
@@ -0,0 +1,21 @@+Name:                heroku+Version:             0.1+Synopsis:            helpers for deploying to Heroku+Description:         currently just a parser for DATABASE_URL+Homepage:            https://github.com/gregwebs/haskell-heroku+License:             BSD3+License-file:        LICENSE+Author:              Greg Weber+Maintainer:          greg@gregweber.info+Category:            Web+Build-type:          Simple++Cabal-version:       >=1.2+++Library+  Exposed-modules:     Web.Heroku+  +  Build-depends: base >= 4 && < 5+               , text+               , network