hi-1.0.0.0: src/Hi/Template.hs
module Hi.Template
(
isTemplate
, readTemplates
, untemplate
) where
import Hi.Directory (inTemporaryDirectory)
import qualified Hi.Git as Git
import Hi.Types
import Control.Applicative ((<$>))
import qualified Data.ByteString as BS (readFile)
import Data.List (isSuffixOf)
import Data.List.Split (splitOn)
-- | Read templates in given 'FilePath'
readTemplates :: TemplateSource -> IO Files
readTemplates (FromRepo repo) =
inTemporaryDirectory "hi" $ do
Git.clone $ Git.expandUrl repo
paths <- Git.lsFiles
mapM fetchFile paths
fetchFile :: FilePath -> IO File
fetchFile fp | isTemplate fp = TemplateFile fp <$> BS.readFile fp
| otherwise = RegularFile fp <$> BS.readFile fp
-- | Determine if a given filepath is a template file based on its extension
-- >>> isTemplate "Example.hs.template"
-- True
-- >>> isTemplate "NotATemplate.hs"
-- False
isTemplate :: FilePath -> Bool
isTemplate = isSuffixOf ".template"
-- | Remove \".template\" from 'FilePath'
untemplate :: FilePath -> FilePath
untemplate = head . splitOn ".template"