List environments

This commit is contained in:
Michael Snoyman 2012-01-12 12:09:01 +02:00
parent b268b37086
commit 277d9c8c64

View File

@ -31,13 +31,14 @@ data DefaultEnv = Development
| Production deriving (Read, Show, Enum, Bounded)
-- | Setup commandline arguments for environment and port
data ArgConfig = ArgConfig
{ environment :: String
data ArgConfig env = ArgConfig
{ environment :: env
, port :: Int
} deriving Show
parseArgConfig :: IO ArgConfig
parseArgConfig :: (Show env, Read env, Enum env, Bounded env) => IO (ArgConfig env)
parseArgConfig = do
let envs = [minBound..maxBound]
args <- getArgs
(portS, args') <- getPort id args
portI <-
@ -45,10 +46,17 @@ parseArgConfig = do
(i, _):_ -> return i
[] -> error $ "Invalid port value: " ++ show portS
case args' of
[e] -> return $ ArgConfig e portI
[e] -> do
case reads $ capitalize e of
(e', _):_ -> return $ ArgConfig e' portI
[] -> do
() <- error $ "Invalid environment, valid entries are: " ++ show envs
-- next line just provided to force the type of envs
return $ ArgConfig (head envs) 0
_ -> do
pn <- getProgName
putStrLn $ "Usage: " ++ pn ++ " <environment> [--port <port>]"
putStrLn $ "Valid environments: " ++ show envs
exitFailure
where
getPort front [] = do
@ -58,17 +66,17 @@ parseArgConfig = do
getPort front ("-p":p:rest) = return (p, front rest)
getPort front (arg:rest) = getPort (front . (arg:)) rest
capitalize [] = []
capitalize (x:xs) = toUpper x : map toLower xs
-- | Load the app config from command line parameters
fromArgs :: (Read env, Show env)
fromArgs :: (Read env, Show env, Enum env, Bounded env)
=> (env -> Object -> Parser extra)
-> IO (AppConfig env extra)
fromArgs getExtra = do
args <- parseArgConfig
env <-
case reads $ capitalize $ environment args of
(e, _):_ -> return e
[] -> error $ "Invalid environment: " ++ environment args
let env = environment args
let cs = (configSettings env)
{ csParseExtra = getExtra
@ -79,10 +87,6 @@ fromArgs getExtra = do
then config { appPort = port args }
else config
where
capitalize [] = []
capitalize (x:xs) = toUpper x : map toLower xs
-- | Load your development config (when using @'DefaultEnv'@)
loadDevelopmentConfig :: IO (AppConfig DefaultEnv ())
loadDevelopmentConfig = loadConfig $ configSettings Development