packages feed

growler 0.3.0 → 0.3.1

raw patch · 5 files changed

+22/−13 lines, 5 files

Files

growler.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                growler-version:             0.3.0+version:             0.3.1 synopsis:            A revised version of the scotty library that attempts to be simpler and more performant. description:         Growler provides a very similar interface to scotty, with slight tweaks for performance and a few feature tradeoffs. Growler provides the ability to abort actions (handlers) with arbitrary responses, not just in the event of redirects or raising errors. Growler avoids coercing everything into lazy Text values and reading the whole request body into memory. It also eliminates the ability to abort the handler and have another handler handle the request instead (Scotty's 'next' function). 		     .@@ -20,8 +20,7 @@ cabal-version:       >=1.10  library-  exposed-modules:   Web.Growler-  other-modules:     Web.Growler.Handler, Web.Growler.Parsable, Web.Growler.Router, Web.Growler.Types+  exposed-modules:   Web.Growler, Web.Growler.Handler, Web.Growler.Parsable, Web.Growler.Router, Web.Growler.Types   other-extensions:    OverloadedStrings, FlexibleContexts, FlexibleInstances, LambdaCase, RankNTypes, ScopedTypeVariables   build-depends:       base >=4.7 && <4.8, lens >=4.4 && <5, mtl >=2.2 && <3, bytestring >=0.10 && <0.20, http-types >=0.8 && <1, text >=1.1 && <2, wai >=3.0 && <4, wai-extra >=3.0 && <4, regex-compat >=0.95 && <1, blaze-builder >=0.3 && <0.7, unordered-containers >=0.2 && <0.9, aeson, vector, case-insensitive, warp, pipes, pipes-aeson, pipes-wai, monad-control, either >= 4.3.1, transformers-base   hs-source-dirs:      src
src/Web/Growler.hs view
@@ -21,6 +21,8 @@ , capture , function , literal+, mount+, handlerHook -- ** Handlers , Handler , HandlerT@@ -94,5 +96,5 @@   where     processResponse (m, pat, respond) = case route r m pat of       Nothing -> Nothing-      Just ps -> Just $ runHandler initialState (Just pat) r ps respond+      Just (patRep, ps) -> Just $ runHandler initialState (Just patRep) r ps respond 
src/Web/Growler/Handler.hs view
@@ -108,10 +108,10 @@   setHeader hContentType "text/html; charset=utf-8"   raw $ TL.encodeUtf8 t -routePattern :: Monad m => HandlerT m (Maybe RoutePattern)+routePattern :: Monad m => HandlerT m (Maybe T.Text) routePattern = HandlerT $ view $ L.matchedPattern -runHandler :: Monad m => ResponseState -> Maybe RoutePattern -> Request -> [Param] -> HandlerT m a -> m (Either ResponseState (a, ResponseState))+runHandler :: Monad m => ResponseState -> Maybe T.Text -> Request -> [Param] -> HandlerT m a -> m (Either ResponseState (a, ResponseState)) runHandler rs pat rq ps m = runEitherT $ do   (dx, r, ()) <- runRWST (fromHandler m) (RequestState pat (qsParams ++ ps) rq) rs   return (dx, r)
src/Web/Growler/Router.hs view
@@ -19,6 +19,7 @@     , mount     , literal     , route+    , handlerHook     , RoutePattern(..)     ) where @@ -107,16 +108,16 @@ addRoute :: (MonadIO m) => StdMethod -> RoutePattern -> HandlerT m () -> GrowlerT m () addRoute method pat action = GrowlerT $ modify ((method, pat, action):) -route :: Request -> StdMethod -> RoutePattern -> Maybe [Param]+route :: Request -> StdMethod -> RoutePattern -> Maybe (T.Text, [Param]) route req method pat = if Right method == parseMethod (requestMethod req)   then matchRoute pat req   else Nothing -matchRoute :: RoutePattern -> Request -> Maybe [Param]-matchRoute (RoutePattern p) req = let (_, _, rps) = p req in case rps of+matchRoute :: RoutePattern -> Request -> Maybe (T.Text, [Param])+matchRoute (RoutePattern p) req = let (pat, _, rps) = p req in case rps of   Fail -> Nothing   Partial _ -> Nothing-  Complete ps -> Just ps+  Complete ps -> Just (pat, ps)  -- Pretend we are at the top level. parseEncodedParams :: B.ByteString -> [Param]
src/Web/Growler/Types.hs view
@@ -44,7 +44,9 @@       Fail -> Fail       Partial rps -> Partial (lps <> rps)       Complete rps -> Complete (lps <> rps)-    Complete lps -> Fail+    Complete lps -> case r of+      Complete rps -> Complete (lps <> rps)+      _ -> Fail   mempty = Partial []  instance Monoid RoutePattern where@@ -57,7 +59,12 @@   fromString = capture . T.pack  path :: Request -> T.Text-path = T.cons '/' . T.intercalate "/" . pathInfo+path r = case front of+  Just ('/', _) -> full+  _ -> T.cons '/' full+  where+    full = T.intercalate "/" $ pathInfo r+    front = T.uncons full  capture :: Text -> RoutePattern capture pat = RoutePattern process@@ -84,7 +91,7 @@                 | RawSource !(IO C.ByteString -> (C.ByteString -> IO ()) -> IO ()) !Response  data RequestState = RequestState-  { requestMatchedPattern :: Maybe RoutePattern+  { requestMatchedPattern :: Maybe T.Text   , requestParams         :: [Param]   , requestRequest        :: Request   }