packages feed

airbrake 0.1.0.0 → 0.2.0.0

raw patch · 3 files changed

+88/−3 lines, 3 filesdep +directorydep +filepathPVP ok

version bump matches the API change (PVP)

Dependencies added: directory, filepath

API changes (from Hackage documentation)

+ Airbrake.Credentials: credentialsDefaultFile :: MonadIO m => m FilePath
+ Airbrake.Credentials: credentialsDefaultKey :: String
+ Airbrake.Credentials: loadCredentialsDefault :: MonadIO m => m (Maybe APIKey)
+ Airbrake.Credentials: loadCredentialsFromEnv :: MonadIO m => m (Maybe APIKey)
+ Airbrake.Credentials: loadCredentialsFromEnvOrFile :: MonadIO m => FilePath -> String -> m (Maybe APIKey)
+ Airbrake.Credentials: loadCredentialsFromFile :: MonadIO m => FilePath -> String -> m (Maybe APIKey)
+ Airbrake.Credentials: type APIKey = String

Files

airbrake.cabal view
@@ -1,5 +1,5 @@ name:                airbrake-version:             0.1.0.0+version:             0.2.0.0 synopsis:            An Airbrake notifier for Haskell description:         Airbrake notifier. homepage:            https://github.com/joelteon/airbrake@@ -12,12 +12,14 @@ cabal-version:       >=1.10  library-  exposed-modules:     Airbrake, Airbrake.WebRequest+  exposed-modules:     Airbrake, Airbrake.WebRequest, Airbrake.Credentials   other-modules:       Paths_airbrake   build-depends:       base == 4.*                      , blaze-markup                      , bytestring+                     , directory                      , exceptions+                     , filepath                      , http-conduit                      , monad-control                      , network
src/Airbrake.hs view
@@ -31,9 +31,13 @@     APIKey, Environment,     airbrakeConf, defaultApiEndpoint,     AirbrakeConf (..),-    Server (..)+    Server (..),++    -- * Convenience exports+    module Airbrake.Credentials ) where +import Airbrake.Credentials hiding (APIKey) import qualified Airbrake.WebRequest as W import Control.Exception import Control.Monad.Catch
+ src/Airbrake/Credentials.hs view
@@ -0,0 +1,79 @@+-- | Utilities for loading the API key from the environment.+module Airbrake.Credentials (+    APIKey,+    credentialsDefaultFile, credentialsDefaultKey,+    loadCredentialsFromFile, loadCredentialsFromEnv,+    loadCredentialsFromEnvOrFile, loadCredentialsDefault+) where++import Control.Monad (liftM)+import Control.Monad.IO.Class+import Data.Functor+import Data.List (find)+import System.Directory+import System.Environment+import System.FilePath++type APIKey = String++-- | The file where API credentials are loaded when using+-- 'loadCredentialsDefault'.+--+-- Default: @$HOME/.airbrake-keys@+credentialsDefaultFile :: MonadIO m => m FilePath+credentialsDefaultFile = liftIO $ liftM (</> ".airbrake-keys") getHomeDirectory++-- | The key to be used in the loaded API credentials file, when using+-- 'loadCredentialsDefault'.+--+-- Default: @default@+credentialsDefaultKey :: String+credentialsDefaultKey = "default"++-- | Load API credentials from a text file given a key name.+--+-- The file should consist of newline-separated credentials in the+-- following format:+--+-- @keyName apiKey@+loadCredentialsFromFile :: MonadIO m => FilePath -> String -> m (Maybe APIKey)+loadCredentialsFromFile file key = liftIO $ do+    contents <- map words . lines <$> readFile file+    return $ do+        [_k, apikey] <- find (hasKey key) contents+        return apikey+    where+        hasKey _ [] = False+        hasKey k (k2 : _) = k == k2++-- | Load API credentials from the environment if possible, or alternately+-- from the default file with the default key name.+--+-- Default file: @$HOME/.airbrake-keys@+--+-- Default key: @default@+--+-- See 'loadCredentialsFromEnv' and 'loadCredentialsFromFile'.+loadCredentialsDefault :: MonadIO m => m (Maybe APIKey)+loadCredentialsDefault = do+    file <- credentialsDefaultFile+    loadCredentialsFromEnvOrFile file credentialsDefaultKey++-- | Load API credentials from the environment variable @AIRBRAKE_API_KEY@.+loadCredentialsFromEnv :: MonadIO m => m (Maybe APIKey)+loadCredentialsFromEnv = liftIO $ do+    env <- getEnvironment+    let lk = flip lookup env+        key = lk "AIRBRAKE_API_KEY"+    return key++-- | Load API credentials from the environment, or, failing that, from the+-- given file with the given key name.+--+-- See 'loadCredentialsFromEnv' and 'loadCredentialsFromFile'.+loadCredentialsFromEnvOrFile :: MonadIO m => FilePath -> String -> m (Maybe APIKey)+loadCredentialsFromEnvOrFile file key = do+    envcr <- loadCredentialsFromEnv+    case envcr of+        Just cr -> return (Just cr)+        Nothing -> loadCredentialsFromFile file key