packages feed

project-template 0.1.0.1 → 0.1.1

raw patch · 3 files changed

+26/−9 lines, 3 filesdep +base64-conduitdep +resourcet

Dependencies added: base64-conduit, resourcet

Files

Text/ProjectTemplate.hs view
@@ -21,7 +21,8 @@ import qualified Data.ByteString.Base64    as B64 import           Data.Typeable             (Typeable) import           Filesystem                (createTree)-import           Filesystem.Path.CurrentOS (directory, encode, fromText, toText)+import           Filesystem.Path.CurrentOS (directory, fromText, toText)+import qualified Data.Conduit.Base64  -- | Create a template file from a stream of file/contents combinations. --@@ -31,14 +32,14 @@     => GInfConduit (FilePath, m ByteString) m ByteString createTemplate = awaitForever $ \(fp, getBS) -> do     bs <- lift getBS-    case runException $ yield bs $$ decodeUtf8 =$ sinkNull of-        Left{} -> do+    case yield bs $$ decodeUtf8 =$ sinkNull of+        Nothing -> do             yield "{-# START_FILE BASE64 "             yield $ encodeUtf8 $ either id id $ toText fp             yield " #-}\n"-            yield $ B64.encode bs+            yield $ B64.joinWith "\n" 76 $ B64.encode bs             yield "\n"-        Right{} -> do+        Just _ -> do             yield "{-# START_FILE "             yield $ encodeUtf8 $ either id id $ toText fp             yield " #-}\n"@@ -73,15 +74,20 @@                 Nothing -> lift $ monadThrow $ InvalidInput t                 Just (fp', isBinary) -> do                     let src-                            | isBinary  = binaryLoop+                            | isBinary  = binaryLoop =$= Data.Conduit.Base64.decode                             | otherwise = textLoop True                     src =$ perFile (fromText fp')                     start      binaryLoop = do-        await >>= maybe (lift $ monadThrow BinaryLoopNeedsOneLine) go+        await >>= maybe (return ()) go       where-        go = yield . B64.decodeLenient . encodeUtf8+        go t =+            case getFileName t of+                Just{} -> leftover t+                Nothing -> do+                    yield $ encodeUtf8 t+                    binaryLoop     textLoop isFirst =         await >>= maybe (return ()) go       where
project-template.cabal view
@@ -1,5 +1,5 @@ name:                project-template-version:             0.1.0.1+version:             0.1.1 synopsis:            Specify Haskell project templates and generate files description:         See initial blog post for explanation: <http://www.yesodweb.com/blog/2012/09/project-templates> homepage:            https://github.com/fpco/haskell-ide@@ -16,6 +16,7 @@   build-depends:       base                         >= 4          && < 5                      , classy-prelude-conduit       >= 0.4                      , base64-bytestring+                     , base64-conduit                      , system-filepath              >= 0.4                      , system-fileio                >= 0.3                      , text                         >= 0.11@@ -23,6 +24,7 @@                      , transformers                 >= 0.2                      , mtl                          >= 2.0                      , conduit                      >= 0.5.4+                     , resourcet                    >= 0.4.3   ghc-options:     -Wall  test-suite test@@ -36,6 +38,7 @@                    , hspec >= 1.3                    , transformers                    , QuickCheck+                   , base64-bytestring     ghc-options:     -Wall  source-repository head
test/Text/ProjectTemplateSpec.hs view
@@ -9,6 +9,7 @@ import Control.Monad.Trans.Writer (execWriter) import Test.QuickCheck.Arbitrary import Data.Char (isAlphaNum)+import qualified Data.ByteString.Base64 as B64  spec :: Spec spec = do@@ -22,6 +23,13 @@                      =$ unpackTemplate receiveMem id                 m'' = pack $ map (second $ concat . toChunks) $ unpack m'              in if m == m'' then True else error (show m'')+    describe "binaries" $ do+        prop "works with multilines" $ \words ->+            let bs = pack words+                encoded = B64.joinWith "\n" 5 $ B64.encode bs+                content = "{-# START_FILE BASE64 foo #-}\n" ++ encoded+                m = execWriter $ runExceptionT_ $ yield content $$ unpackTemplate receiveMem id+             in lookup "foo" m == Just (fromChunks [bs])  newtype Helper = Helper (Map FilePath ByteString)     deriving (Show, Eq)