----------------------------------------------------------------------------- -- Copyright 2016, Ideas project team. This file is distributed under the -- terms of the Apache License 2.0. For more information, see the files -- "LICENSE.txt" and "NOTICE.txt", which are included in the distribution. ----------------------------------------------------------------------------- -- | -- Maintainer : bastiaan.heeren@ou.nl -- Stability : provisional -- Portability : portable (depends on ghc) -- ----------------------------------------------------------------------------- module Ideas.Encoding.Options ( Options, makeOptions, optionBaseUrl , script, request, qcGen, baseUrl, maxTime , cgiBin, optionCgiBin, optionHtml ) where import Control.Applicative import Data.Monoid import Ideas.Common.Library (Exercise, getId) import Ideas.Encoding.Request import Ideas.Service.DomainReasoner import Ideas.Service.FeedbackScript.Parser (parseScriptSafe, Script) import Test.QuickCheck.Random ------------------------------------------------------------------- -- Options cgiBin :: Options -> Maybe String cgiBin = cgiBinary . request optionCgiBin :: String -> Options optionCgiBin s = mempty {request = mempty {cgiBinary = Just s}} data Options = Options { request :: Request -- meta-information about the request , qcGen :: Maybe QCGen -- random number generator , script :: Script -- feedback script , baseUrl :: Maybe String -- for html-encoder's css and image files , maxTime :: Maybe Int -- timeout for services, in seconds } instance Monoid Options where mempty = Options mempty Nothing mempty Nothing Nothing mappend x y = Options { request = request x <> request y , qcGen = make qcGen , script = script x <> script y , baseUrl = make baseUrl , maxTime = make maxTime } where make f = f x <|> f y optionHtml :: Options optionHtml = mempty { request = mempty {encoding = [EncHTML]} } optionBaseUrl :: String -> Options optionBaseUrl base = mempty {baseUrl = Just base} makeOptions :: DomainReasoner -> Exercise a -> Request -> IO Options makeOptions dr ex req = do gen <- maybe newQCGen (return . mkQCGen) (randomSeed req) scr <- case feedbackScript req of Just s -> parseScriptSafe s Nothing -> defaultScript dr (getId ex) return $ mempty { request = req , qcGen = Just gen , script = scr }