yesod/scaffold/test_hs.cg
Greg Weber 7452726d40 add a Settings.yaml file for dynamic settings
also command line to check for environment argument
2011-07-08 10:33:10 -07:00

52 lines
1.4 KiB
Plaintext

{-# LANGUAGE CPP, DeriveDataTypeable #-}
import qualified Settings as Settings
import Controller (with~sitearg~)
import Network.Wai.Handler.Warp (run)
import System.Console.CmdArgs
import Data.Char (toUpper, toLower)
#if PRODUCTION
main :: IO ()
main = do
appEnv <- getAppEnv
config <- Settings.loadConfig appEnv
with~sitearg~ config $ run (Settings.appPort settings)
#else
import System.IO (hPutStrLn, stderr)
import Network.Wai.Middleware.Debug (debug)
main :: IO ()
main = do
appEnv <- getAppEnv
config <- Settings.loadConfig appEnv
hPutStrLn stderr $ "Application launched, listening on port " ++ show (Settings.appPort config)
with~sitearg~ config $ run (Settings.appPort config) . debug
#endif
data ArgConfig = ArgConfig {environment :: String}
deriving (Show, Data, Typeable)
config = ArgConfig{ environment = def
&= help "application environment, one of:" ++ (foldl1 (++) environments)
&= typ "ENVIRONMENT"
#if PRODUCTION
&= opt "production"
#else
&= opt "development"
#endif
}
environments :: [String]
environments = map show ([minBound..maxBound] :: [Settings.AppEnvironment])
-- | retrieve the -e environment option
getAppEnv :: IO Settings.AppEnvironment
getAppEnv = do
cfg <- cmdArgs config
return $ read $ capitalize $ environment cfg
where
capitalize [] = []
capitalize (x:xs) = toUpper x : map toLower xs