waitra 0.0.3.0 → 0.0.4.0
raw patch · 6 files changed
+73/−15 lines, 6 filesdep +wai-app-staticdep +warpdep ~aesondep ~basedep ~regex-applicativenew-component:exe:waitra-examplebinary-addedPVP ok
version bump matches the API change (PVP)
Dependencies added: wai-app-static, warp
Dependency ranges changed: aeson, base, regex-applicative, wai
API changes (from Hackage documentation)
Files
- examples/Example.hs +23/−0
- src/Network/Waitra.hs +4/−0
- static/favicon.ico binary
- static/index.html +13/−0
- test/Main.hs +10/−11
- waitra.cabal +23/−4
+ examples/Example.hs view
@@ -0,0 +1,23 @@+{-# LANGUAGE TemplateHaskell #-}+module Main where++import Control.Applicative+import Data.String+import Network.Wai+import Network.Wai.Application.Static+import Network.Wai.Handler.Warp+import Network.Waitra+import Network.Waitra.Embedded+import System.Environment (lookupEnv)++echoRoute :: Route+echoRoute = routeGet (echoApp <$ string "/api/echo/" <*> many anySym)+ where echoApp msg _req respond = respond $ responseLBS status200 [] (fromString msg)++app :: Application+app = waitraMiddleware [echoRoute] $ staticApp $ embeddedSettings $(mkRecursiveEmbedded "static")++main :: IO ()+main = do+ port <- maybe 8000 read <$> lookupEnv "PORT"+ run port app
src/Network/Waitra.hs view
@@ -32,12 +32,16 @@ -- * Compilation , routeMiddleware , waitraMiddleware+ -- * Re-exports+ , module Text.Regex.Applicative+ , module Network.HTTP.Types.Status ) where import Data.Aeson import Data.String (fromString) import qualified Data.Text as T import qualified Network.HTTP.Types as H+import Network.HTTP.Types.Status import Network.Wai import Text.Regex.Applicative
+ static/favicon.ico view
binary file changed (absent → 1150 bytes)
+ static/index.html view
@@ -0,0 +1,13 @@+<!DOCTYPE html>+<html>+ <head>+ <meta charset=utf-8 />+ <link rel="shortcut icon" href="/favicon.ico" />+ <title>Waitra demo</title>+ </head>+ <body>+ <h1>Waitra</h1>+ <p>Try <a href="/api/echo/hello">/api/echo/hello</a></p>+ </body>+</html>+
test/Main.hs view
@@ -3,26 +3,25 @@ import Data.Aeson import Data.String (fromString)-import qualified Network.HTTP.Types as H import Network.Wai import Network.Wai.Test import Network.Waitra import Test.Tasty+import Network.HTTP.Types.Header import Test.Tasty.HUnit-import Text.Regex.Applicative echoRoute :: Route echoRoute = routeGet (echoApp <$ string "/api/echo/" <*> many anySym)- where echoApp msg _req respond = respond $ responseLBS H.status200 [] (fromString msg)+ where echoApp msg _req respond = respond $ responseLBS status200 [] (fromString msg) jsonRoute :: Route jsonRoute = simpleGet "/api/json" $ jsonApp (return . f)- where f (Object _) = (H.status200, [], "object" :: String)- f (Array _) = (H.status200, [], "array")- f v = (H.status404, [], show v)+ where f (Object _) = (status200, [], "object" :: String)+ f (Array _) = (status200, [], "array")+ f v = (status404, [], show v) emptyApp :: Application-emptyApp _ respond = respond $ responseLBS H.status404 [] (fromString "Fallback: Not found")+emptyApp _ respond = respond $ responseLBS status404 [] (fromString "Fallback: Not found") app :: Application app = waitraMiddleware [echoRoute, jsonRoute] emptyApp@@ -36,7 +35,7 @@ res <- request req assertStatus 200 res assertBody "foobar" res- + echoCase2 :: IO () echoCase2 = runApp $ do let req = setPath defaultRequest "/not-found"@@ -48,14 +47,14 @@ let req = setPath defaultRequest "/api/json" res <- srequest $ SRequest req "{}" assertStatus 200 res- assertHeader H.hContentType "application/json" res+ assertHeader hContentType "application/json" res assertBody "\"object\"" res --- Cannot parse number as json+-- Cannot parse random string as json jsonCase2 :: IO () jsonCase2 = runApp $ do let req = setPath defaultRequest "/api/json"- res <- srequest $ SRequest req "42"+ res <- srequest $ SRequest req "foo" assertStatus 400 res tests :: TestTree
waitra.cabal view
@@ -1,5 +1,5 @@ name: waitra-version: 0.0.3.0+version: 0.0.4.0 synopsis: A very simple Wai router description: Waitra is a very simple router.@@ -20,9 +20,15 @@ copyright: (c) 2015 Futurice category: Web build-type: Simple-extra-source-files: README.md+extra-source-files: README.md, static/index.html, static/favicon.ico cabal-version: >=1.10 +flag examples+ description: Build example executables+ default: False+ manual: True++ library exposed-modules: Network.Waitra, Network.Waitra.Embedded@@ -43,11 +49,9 @@ test-suite test main-is: Main.hs type: exitcode-stdio-1.0- build-depends: base >= 4.6 && < 4.9, aeson, http-types,- regex-applicative, tasty, tasty-hunit, wai,@@ -56,6 +60,21 @@ hs-source-dirs: test ghc-options: -Wall default-language: Haskell2010++executable waitra-example+ if !flag(examples)+ buildable: False+ main-is: Example.hs+ ghc-options: -Wall+ hs-source-dirs: examples/+ default-language: Haskell2010+ build-depends: base,+ aeson,+ warp,+ wai,+ wai-app-static >= 3.0,+ waitra,+ warp source-repository head type: git