headergen-0.1.1.1: src/Headergen/Commands/Initialization.hs
{- |
Module : $Header$
Description : Contains all relevant definitions for the initialization command.
Author : Nils 'bash0r' Jonsson
Copyright : (c) 2015 Nils 'bash0r' Jonsson
License : MIT
Maintainer : aka.bash0r@gmail.com
Stability : unstable
Portability : non-portable (Portability is untested.)
Contains all relevant definitions for the initialization command.
-}
module Headergen.Commands.Initialization
( command
, help
) where
import Control.Applicative
import Control.Monad
import Data.Aeson ()
import Data.Aeson.Encode.Pretty
import Data.Time.Calendar
import Data.Time.Clock
import qualified Data.ByteString.Lazy as BS
import System.Console.Haskeline
import System.Directory
import System.IO
import Headergen.Configuration
import Headergen.Messages
import Headergen.Utility
command :: [String] -> IO ()
command [] = initializeDefinition
command _ = undefined -- TODO: implement printing of help message.
help :: IO ()
help = do
putStrLn " headergen init"
putStrLn " --> initializes a new .headergen.def."
-- | Initialize a .headergen.def.
initializeDefinition = do
exists <- doesFileExist ".headergen.def"
if exists
then do
allowance <- requestForAllowance
if allowance
then do
hgd <- requestConfiguration
createHeadergenDef hgd
else
putStrLn noResourcesCreatedMessage
else do
hgd <- requestConfiguration
createHeadergenDef hgd
-- | Request the configuration from console.
requestConfiguration = do
(year, _, _) <- date
runInputT defaultSettings $ do
mod <- getInputLine moduleMessage
desc <- getInputLine descriptionMessage
auth <- getInputLine authorMessage
let copyRightText = "(c) " ++ show year ++ " " ++ def auth ""
copyRight = copyRightMessage copyRightText
copyr <- getInputLine copyRight
lic <- getInputLine licenseMessage
maint <- getInputLine maintainerMessage
stab <- getInputLine stabilityMessage
portab <- getInputLine portabilityMessage
return ( Configuration (def mod "$Header$" )
(def desc "" )
(def auth "" )
(def copyr copyRightText )
(def lic "MIT" )
(def maint "" )
(def stab "unstable" )
(def portab "non-portable (Portability is untested.)") )
-- | Create a .headergen.def in the current directory.
createHeadergenDef conf = do
file <- openFile ".headergen.def" WriteMode
BS.hPutStr file (encodePretty conf)
hFlush file
hClose file
-- | Current date.
date = liftM (toGregorian . utctDay) getCurrentTime