packages feed

route-generator 0.5 → 0.6

raw patch · 2 files changed

+43/−37 lines, 2 files

Files

route-generator.cabal view
@@ -1,5 +1,5 @@ name:            route-generator-version:         0.5+version:         0.6 cabal-version:   >= 1.8 license:         OtherLicense license-file:    COPYING
routeGenerator.hs view
@@ -7,7 +7,7 @@ import System.IO (hPutStrLn, stderr) import Data.List (intercalate) import Data.Char (isUpper, isSpace)-import Data.Maybe (catMaybes, isJust)+import Data.Maybe (catMaybes, isJust, fromMaybe) import Yesod.Routes.Dispatch (Piece(Static, Dynamic)) import Network.URI (escapeURIString, isReserved, isUnescapedInURI) @@ -18,7 +18,7 @@ import Data.Attoparsec.Text import Control.Applicative -data Flag = Help | PathHelpers | Routes | NArgs Int | Mod String deriving (Show, Read, Eq)+data Flag = Help | PathHelpers | Routes | NArgs Int | Mod String | OutputName String deriving (Show, Read, Eq)  flags :: [OptDescr Flag] flags = [@@ -26,6 +26,7 @@ 		Option ['p'] ["pathHelpers"] (NoArg PathHelpers) "Generate actionPath helper functions.", 		Option ['m'] ["module"] (ReqArg Mod "MODULE") "Implementation module to import.", 		Option ['n'] ["nArgs"] (ReqArg (NArgs . read) "NARGS") "Number of arguments the `route` function takes.",+		Option ['o'] ["outputName"] (ReqArg OutputName "NAME") "Name of the output module (defaults to Routes).", 		Option ['h'] ["help"] (NoArg Help) "Show this help text." 	] @@ -33,7 +34,7 @@ usage errors = do 	mapM_ (hPutStrLn stderr) errors 	name <- getProgName-	hPutStrLn stderr $ usageInfo (name ++ " -r -p [-m MODULE] [-n NARGS] <input-file>") flags+	hPutStrLn stderr $ usageInfo (name ++ " -r -p [-m MODULE] [-n NARGS] [-o NAME] <input-file>") flags  data Route = Route { 		method :: Text,@@ -169,43 +170,48 @@ 			hPutStrLn stderr "Must pass -r or -p" 			usage errors >> exitFailure 		_ -> main' (head args) flags-	where-	main' input flags = do-		Right routes <- fmap (parseOnly parser) $ T.readFile input -		when (Routes `elem` flags) $ do-			-- GHC pragma turns off warnings we know about-			-- Should be ignored by other compilers, so is safe-			putStrLn "{-# OPTIONS_GHC -fno-warn-missing-signatures #-}"-			putStrLn "module Routes where"-			putStrLn ""+main' :: FilePath -> [Flag] -> IO ()+main' input flags = do+	Right routes <- fmap (parseOnly parser) $ T.readFile input -		mapM_ (\flag -> case flag of-				Mod m -> putStrLn $ "import " ++ m-				_ -> return ()-			) flags+	when (Routes `elem` flags) $ do+		-- GHC pragma turns off warnings we know about+		-- Should be ignored by other compilers, so is safe+		putStrLn "{-# OPTIONS_GHC -fno-warn-missing-signatures #-}"+		putStrLn $ "module " ++ fromFlags "Routes" getOutputName ++ " where"+		putStrLn "" -		when (Routes `elem` flags) $ do-			putStrLn "import Control.Monad (ap)"-			putStrLn "import Data.Text (pack)"-			putStrLn "import Web.PathPieces (fromPathPiece, fromPathMultiPiece)"-			putStrLn "import Yesod.Routes.Dispatch (Route(..), Piece(Static, Dynamic))"+	mapM_ (\flag -> case flag of+			Mod m -> putStrLn $ "import " ++ m+			_ -> return ()+		) flags -		-- Fully qualified to help when using with CPP-		when (PathHelpers `elem` flags) $ do-			putStrLn "import qualified Data.List (intercalate)"-			putStrLn "import qualified Network.URI (URI(..), escapeURIString, isReserved, isUnescapedInURI)"-			putStrLn "import qualified Data.Text (unpack)"-			putStrLn "import qualified Web.PathPieces (toPathPiece, toPathMultiPiece)"-			putStrLn "import qualified Network.URI.Partial"+	when (Routes `elem` flags) $ do+		putStrLn "import Control.Monad (ap)"+		putStrLn "import Data.Text (pack)"+		putStrLn "import Web.PathPieces (fromPathPiece, fromPathMultiPiece)"+		putStrLn "import Yesod.Routes.Dispatch (Route(..), Piece(Static, Dynamic))" -		putStrLn ""+	-- Fully qualified to help when using with CPP+	when (PathHelpers `elem` flags) $ do+		putStrLn "import qualified Data.List (intercalate)"+		putStrLn "import qualified Network.URI (URI(..), escapeURIString, isReserved, isUnescapedInURI)"+		putStrLn "import qualified Data.Text (unpack)"+		putStrLn "import qualified Web.PathPieces (toPathPiece, toPathMultiPiece)"+		putStrLn "import qualified Network.URI.Partial" -		let nArgs = getNArgs flags-		when (PathHelpers `elem` flags) (emitPathHelpers routes nArgs)-		when (Routes `elem` flags)  (emitRoutes routes nArgs)+	putStrLn "" -	getNArgs = foldr (\flag n -> case (n,flag) of-			(0, NArgs n) -> n-			_ -> n-		) 0+	let nArgs = fromFlags 0 getNArg+	when (PathHelpers `elem` flags) (emitPathHelpers routes nArgs)+	when (Routes `elem` flags)  (emitRoutes routes nArgs)++	where+	fromFlags def sel = foldr (\f d -> fromMaybe d (sel f)) def flags++	getOutputName (OutputName n) = Just n+	getOutputName _ = Nothing++	getNArg (NArgs n) = Just n+	getNArg _ = Nothing