aboutsummaryrefslogtreecommitdiff
path: root/Application.hs
diff options
context:
space:
mode:
authorGuillermo Ramos2014-09-27 15:34:15 +0200
committerGuillermo Ramos2014-09-27 16:12:49 +0200
commit6e99d20972bec95d3502ef7549d74f67b4cf0001 (patch)
tree387c36753f158db69dc117ede96a8586d4697f63 /Application.hs
downloadturing-web-6e99d20972bec95d3502ef7549d74f67b4cf0001.tar.gz
Initial commit (using Yesod's scaffolding)
Diffstat (limited to 'Application.hs')
-rw-r--r--Application.hs75
1 files changed, 75 insertions, 0 deletions
diff --git a/Application.hs b/Application.hs
new file mode 100644
index 0000000..5646408
--- /dev/null
+++ b/Application.hs
@@ -0,0 +1,75 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Application
+ ( makeApplication
+ , getApplicationDev
+ , makeFoundation
+ ) where
+
+import Import
+import Yesod.Default.Config
+import Yesod.Default.Main
+import Yesod.Default.Handlers
+import Network.Wai.Middleware.RequestLogger
+ ( mkRequestLogger, outputFormat, OutputFormat (..), IPAddrSource (..), destination
+ )
+import qualified Network.Wai.Middleware.RequestLogger as RequestLogger
+import Network.HTTP.Client.Conduit (newManager)
+import System.Log.FastLogger (newStdoutLoggerSet, defaultBufSize)
+import Network.Wai.Logger (clockDateCacher)
+import Data.Default (def)
+import Yesod.Core.Types (loggerSet, Logger (Logger))
+
+-- Import all relevant handler modules here.
+-- Don't forget to add new modules to your cabal file!
+import Handler.Home
+
+-- This line actually creates our YesodDispatch instance. It is the second half
+-- of the call to mkYesodData which occurs in Foundation.hs. Please see the
+-- comments there for more details.
+mkYesodDispatch "App" resourcesApp
+
+-- This function allocates resources (such as a database connection pool),
+-- performs initialization and creates a WAI application. This is also the
+-- place to put your migrate statements to have automatic database
+-- migrations handled by Yesod.
+makeApplication :: AppConfig DefaultEnv Extra -> IO (Application, LogFunc)
+makeApplication conf = do
+ foundation <- makeFoundation conf
+
+ -- Initialize the logging middleware
+ logWare <- mkRequestLogger def
+ { outputFormat =
+ if development
+ then Detailed True
+ else Apache FromSocket
+ , destination = RequestLogger.Logger $ loggerSet $ appLogger foundation
+ }
+
+ -- Create the WAI application and apply middlewares
+ app <- toWaiAppPlain foundation
+ let logFunc = messageLoggerSource foundation (appLogger foundation)
+ return (logWare $ defaultMiddlewaresNoLogging app, logFunc)
+
+-- | Loads up any necessary settings, creates your foundation datatype, and
+-- performs some initialization.
+makeFoundation :: AppConfig DefaultEnv Extra -> IO App
+makeFoundation conf = do
+ manager <- newManager
+ s <- staticSite
+
+ loggerSet' <- newStdoutLoggerSet defaultBufSize
+ (getter, _) <- clockDateCacher
+
+ let logger = Yesod.Core.Types.Logger loggerSet' getter
+ foundation = App conf s manager logger
+
+ return foundation
+
+-- for yesod devel
+getApplicationDev :: IO (Int, Application)
+getApplicationDev =
+ defaultDevelApp loader (fmap fst . makeApplication)
+ where
+ loader = Yesod.Default.Config.loadConfig (configSettings Development)
+ { csParseExtra = parseExtra
+ }