hscaffold 0.1.1.0 → 0.2.0.0
raw patch · 2 files changed
+34/−10 lines, 2 filesdep +transformers
Dependencies added: transformers
Files
- hscaffold.cabal +3/−1
- src/Hscaffold.hs +31/−9
hscaffold.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack name: hscaffold-version: 0.1.1.0+version: 0.2.0.0 synopsis: Very simple file/directory structure scaffolding writer monad EDSL description: See our README on GitHub at <https://github.com/yamadapc/hscaffold> homepage: https://github.com/yamadapc/hscaffold#readme@@ -29,6 +29,7 @@ base >=4.8 && <4.9 , text , mtl+ , transformers , directory , filepath , unix@@ -49,6 +50,7 @@ base >=4.8 && <4.9 , text , mtl+ , transformers , directory , filepath , unix
src/Hscaffold.hs view
@@ -4,6 +4,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-} module Hscaffold ( runHscaffold , runAction@@ -13,16 +14,18 @@ , directory , file , link- , Permissions(..)+ , copy , fileWith , directoryWith , permissions+ , Permissions(..) , ScaffoldActionType(..) , ScaffoldAction , ScaffoldActionV , module Data.Text+ , module Control.Monad.IO.Class , module Control.Monad.Writer , module System.Directory , module System.FilePath@@ -30,14 +33,15 @@ where import Control.Applicative+import Control.Monad.IO.Class import Control.Monad.Writer-import Data.Text (Text)+import Data.Text (Text) import qualified Data.Text-import qualified Data.Text.IO as Text+import qualified Data.Text.IO as Text import System.Directory -- TODO - Disable this on Windows-import System.Posix.Files import System.FilePath+import System.Posix.Files -- | Run the scaffolding writer on the IO monad with no extensions@@ -69,6 +73,12 @@ runAction root (Directory fp nested) = do createDirectoryIfMissing True (root </> fp) mapM_ (runAction (root </> fp)) nested+runAction root (Copy fp1 fp2) = do+ let fp1' = makeAbsolute fp1+ fp2' = makeAbsolute fp2+ copyFile fp1' fp2'+ where+ makeAbsolute fp = if isAbsolute fp then fp else root </> fp -- | Accumulator for actions type ScaffoldAction e = [ScaffoldActionType e]@@ -78,11 +88,13 @@ -- | Type of actions scaffolding can make, 'ScaffoldActionTypeExtension' is open -- for extension through other data-types-data ScaffoldActionType e = File FilePath Text- | Link FilePath FilePath- | Directory FilePath (ScaffoldAction e)- | SetPermissions Permissions FilePath- | ScaffoldActionTypeExtension e+data ScaffoldActionType e+ = File FilePath Text+ | Link FilePath FilePath+ | Directory FilePath (ScaffoldAction e)+ | SetPermissions Permissions FilePath+ | Copy FilePath FilePath+ | ScaffoldActionTypeExtension e deriving(Show, Eq, Ord) -- | Create a directory with the nested contents@@ -142,3 +154,13 @@ -> FilePath -> m () link fp1 fp2 = tell [Link fp1 fp2]++-- | Copy a file from A to B+--+-- *Non-absolute paths are treated relative to the root*+copy+ :: MonadWriter (ScaffoldAction e) m+ => FilePath+ -> FilePath+ -> m ()+copy fp1 fp2 = tell [Copy fp1 fp2]