packages feed

Spock 0.6.3.0 → 0.6.4.0

raw patch · 4 files changed

+26/−4 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Web.Spock: jsonBody' :: (MonadIO m, FromJSON a) => ActionT m a

Files

Spock.cabal view
@@ -1,5 +1,5 @@ name:                Spock-version:             0.6.3.0+version:             0.6.4.0 synopsis:            Another Haskell web framework for rapid development description:         This toolbox provides everything you need to get a quick start into web hacking with haskell: routing, middleware, json, blaze, sessions, cookies, database helper, csrf-protection, global state Homepage:            https://github.com/agrafix/Spock
src/Web/Spock.hs view
@@ -12,7 +12,7 @@     , subcomponent, Http.StdMethod (..)     , combineRoute      -- * Handeling requests-    , request, header, cookie, body, jsonBody, files, UploadedFile (..)+    , request, header, cookie, body, jsonBody, jsonBody', files, UploadedFile (..)     , params, param      -- * Sending responses     , setStatus, setHeader, redirect, jumpNext, setCookie, setCookie', bytes, lazyBytes
src/Web/Spock/Core.hs view
@@ -1,10 +1,11 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-}+{-# LANGUAGE DoAndIfThenElse #-} module Web.Spock.Core     ( SpockT, ActionT, spockT     , middleware, UploadedFile (..)     , defRoute, get, post, head, put, delete, patch-    , request, header, cookie, body, jsonBody+    , request, header, cookie, body, jsonBody, jsonBody'     , files, params, param, setStatus, setHeader, redirect     , jumpNext     , setCookie, setCookie'@@ -98,13 +99,31 @@ body :: MonadIO m => ActionT m BS.ByteString body =     do req <- request-       liftIO $ Wai.requestBody req+       let parseBody = liftIO $ Wai.requestBody req+           parseAll chunks =+               do bs <- parseBody+                  if BS.null bs+                  then return chunks+                  else parseAll (chunks `BS.append` bs)+       parseAll BS.empty  -- | Parse the request body as json jsonBody :: (MonadIO m, A.FromJSON a) => ActionT m (Maybe a) jsonBody =     do b <- body        return $ A.decodeStrict b++-- | Parse the request body as json and fails with 500 status code on error+jsonBody' :: (MonadIO m, A.FromJSON a) => ActionT m a+jsonBody' =+    do b <- body+       case A.eitherDecodeStrict' b of+         Left err ->+             do setStatus status500+                text (T.pack $ "Failed to parse json: " ++ err)+                throwError ActionDone+         Right val ->+             return val  -- | Get uploaded files files :: MonadIO m => ActionT m (HM.HashMap T.Text UploadedFile)
src/Web/Spock/Wire.hs view
@@ -83,6 +83,7 @@     = ActionRedirect T.Text     | ActionTryNext     | ActionError String+    | ActionDone     deriving (Show)  instance Error ActionInterupt where@@ -198,6 +199,8 @@                                                 do liftIO $ putStrLn $ "Spock Error while handeling "                                                               ++ show (Wai.pathInfo req) ++ ": " ++ errorMsg                                                    return serverError+                                            Left ActionDone ->+                                                return respState                                             Right () ->                                                 return respState                                respState <-