packages feed

yesod-raml-bin 0.1.1 → 0.1.2

raw patch · 4 files changed

+91/−2 lines, 4 filesdep +http-typesdep +waidep +warp

Dependencies added: http-types, wai, warp, yesod-core, yesod-raml-mock

Files

ChangeLog.md view
@@ -1,3 +1,8 @@+## 0.1.2++* Add pretty print for mock-handler+* Add mock-server function+ ## 0.1.1  * Fix README
README.md view
@@ -6,6 +6,8 @@ - Verify RAML format - Convert RAML to HTML - Convert RAML to Yesod-Route file+- Generate mock-handler code+- Run mock server   ## Usage@@ -26,4 +28,16 @@  ``` > yesod-raml-bin toroute "raml file" "routes file"+```++Generate mock-handler code++```+> yesod-raml-bin tomock "raml file" "haskell mock code"+```++Run mock-server++```+> yesod-raml-bin mock-server -p "port(default: 3000)" "raml file" ```
main.hs view
@@ -1,16 +1,31 @@+{-# LANGUAGE OverloadedStrings #-}+ import Yesod.Raml.Type import Yesod.Raml.Routes import Yesod.Raml.Docs+import Yesod.Raml.Mock import qualified Data.Yaml as Y+import qualified Data.Text as TS+import qualified Data.Text.Encoding as TS import qualified Data.Text.Lazy as T import qualified Data.Text.Lazy.IO as T+import qualified Data.ByteString.Char8 as BC+import qualified Data.ByteString.Lazy as BL import Text.Blaze.Html.Renderer.Text- import Options.Applicative +import Yesod.Routes.TH.Types+import Network.Wai+import Network.Wai.Handler.Warp+import Network.HTTP.Types.Status+import Network.HTTP.Types.Header+import Data.Maybe+ data Command =     ToRoute FilePath FilePath   | ToHtml FilePath FilePath+  | ToMock FilePath FilePath+  | MockServer Port FilePath   | Verify FilePath  toroute :: Parser Command@@ -23,10 +38,25 @@          <$> (argument str (metavar "RamlFile"))          <*> (argument str (metavar "HtmlFile")) +tomock :: Parser Command+tomock = ToMock+         <$> (argument str (metavar "RamlFile"))+         <*> (argument str (metavar "MockFile"))++mockServer :: Parser Command+mockServer = MockServer+         <$> option auto (long "port"+                          <> short 'p'+                          <> value 3000+                          <> metavar "port")+         <*> (argument str (metavar "RamlFile"))+ parse :: Parser Command parse = subparser $          command "toroute" (info toroute (progDesc "convert raml-file to route-file")) <>         command "tohtml" (info tohtml (progDesc "convert raml-file to html-file")) <>+        command "tomock" (info tomock (progDesc "convert raml-file to mock-file")) <>+        command "mock-server" (info mockServer (progDesc "run mock-server")) <>         command "verify" (info verify (progDesc "verify raml-file"))  verify :: Parser Command@@ -49,10 +79,45 @@     Left e -> print (show e)     Right raml' -> T.writeFile ofile (renderHtml (htmlFromRaml raml')) +runCmd (ToMock ifile ofile) = do+  v <- Y.decodeFileEither ifile :: IO (Either Y.ParseException Raml)+  case v of+    Left e -> print (show e)+    Right raml' ->  do+      mockSrcFromRaml raml' >>= writeFile ofile+ runCmd (Verify file) = do   v <- Y.decodeFileEither file :: IO (Either Y.ParseException Raml)   print v       +runCmd (MockServer port ifile) = do+  v <- Y.decodeFileEither ifile :: IO (Either Y.ParseException Raml)+  case v of+    Left e -> print (show e)+    Right raml' ->  do+      case routesFromRaml raml' of+        Left e' ->  print (show e')+        Right routes ->  run port (app routes)++comparePath ::  [Piece String] ->  [TS.Text] ->  Bool+comparePath [] [] = True+comparePath [] (_:_) = False+comparePath (_:_)  [] = False+comparePath (Static str:xs) (str':xs') = if (TS.pack str) == str' then comparePath xs xs' else False+comparePath (Dynamic _:xs)  (_:xs') = comparePath xs xs'+++app ::  [RouteEx] ->  Application+app routes req respond = do+  let method = requestMethod req+      paths = pathInfo req+      mexample = do+        r <-  listToMaybe $ filter (\r ->  comparePath (re_pieces r) paths)  $ routes+        methodex <-  listToMaybe $ filter  (\m ->  me_method m ==  BC.unpack method ) $ re_methods r+        me_example methodex+  case mexample of+    Nothing ->  respond $ responseLBS status400 [] ""+    Just (ctype,val) ->  respond $ responseLBS status200 [(hContentType,TS.encodeUtf8 ctype)] $ BL.fromStrict $ TS.encodeUtf8 val  opts :: ParserInfo Command opts = info (parse <**> helper) idm
yesod-raml-bin.cabal view
@@ -1,5 +1,5 @@ name:                yesod-raml-bin-version:             0.1.1+version:             0.1.2 synopsis:            The raml helper executable. description:         Provides html documentation and route file generator license:             MIT@@ -26,7 +26,10 @@   build-depends:       base ==4.*                      , yesod-raml == 0.2.*                      , yesod-raml-docs == 0.1.*+                     , yesod-raml-mock == 0.1.*                      , yesod-markdown+                     , yesod-core+                     , http-types                      , shakespeare                      , blaze-markup                      , blaze-html@@ -36,5 +39,7 @@                      , yaml                      , bytestring                      , template-haskell+                     , warp+                     , wai   default-language:    Haskell2010   ghc-options:       -Wall