hastache 0.1.5 → 0.1.6
raw patch · 4 files changed
+47/−17 lines, 4 filesdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
- Text.Hastache: hastacheFile :: MonadIO m => MuConfig -> String -> MuContext m -> m ByteString
+ Text.Hastache: hastacheFile :: MonadIO m => MuConfig -> FilePath -> MuContext m -> m ByteString
- Text.Hastache.Context: mkGenericContext :: (Monad m, Data a) => a -> MuContext m
+ Text.Hastache.Context: mkGenericContext :: (Monad m, Data a, Typeable1 m) => a -> MuContext m
Files
- Text/Hastache.hs +1/−1
- Text/Hastache/Context.hs +34/−12
- hastache.cabal +1/−1
- tests/test.hs +11/−3
Text/Hastache.hs view
@@ -358,7 +358,7 @@ -- | Render Hastache template from file hastacheFile :: (MonadIO m) => MuConfig -- ^ Configuration- -> String -- ^ Template file name+ -> FilePath -- ^ Template file name -> MuContext m -- ^ Context -> m LZ.ByteString hastacheFile conf file_name context = do
Text/Hastache/Context.hs view
@@ -44,13 +44,15 @@ } deriving (Data, Typeable, Show) data Example = Example {- stringField :: String,- intField :: Int,- dataField :: InternalData,- simpleListField :: [String],- dataListField :: [InternalData],- stringFunc :: String -> String,- byteStringFunc :: Data.ByteString.ByteString -> Data.ByteString.ByteString+ stringField :: String,+ intField :: Int,+ dataField :: InternalData,+ simpleListField :: [String],+ dataListField :: [InternalData],+ stringFunc :: String -> String,+ byteStringFunc :: Data.ByteString.ByteString -> Data.ByteString.ByteString,+ monadicStringFunc :: String -> IO String,+ monadicByteStringFunc :: Data.ByteString.ByteString -> IO Data.ByteString.ByteString } deriving (Data, Typeable) example = hastacheStr defaultConfig (encodeStr template) @@ -67,12 +69,18 @@ \" * {{someField}}, {{anotherField}}. top level var: {{intField}}\", \"{{/dataListField}}\", \"{{#stringFunc}}upper{{/stringFunc}}\",- \"{{#byteStringFunc}}reverse{{/byteStringFunc}}\"]+ \"{{#byteStringFunc}}reverse{{/byteStringFunc}}\",+ \"{{#monadicStringFunc}}upper (monadic){{/monadicStringFunc}}\",+ \"{{#monadicByteStringFunc}}reverse (monadic){{/monadicByteStringFunc}}\"] context = Example { stringField = \"string value\", intField = 1, dataField = InternalData \"val\" 123, simpleListField = [\"a\",\"b\",\"c\"], dataListField = [InternalData \"aaa\" 1, InternalData \"bbb\" 2], stringFunc = map Data.Char.toUpper,- byteStringFunc = Data.ByteString.reverse }+ byteStringFunc = Data.ByteString.reverse,+ monadicStringFunc = return . map Data.Char.toUpper,+ monadicByteStringFunc = return . Data.ByteString.reverse }++main = example >>= Data.ByteString.Lazy.putStrLn @ Result:@@ -88,9 +96,11 @@ * bbb, 2. top level var: 1 UPPER esrever +UPPER (MONADIC)+)cidanom( esrever @ -}-mkGenericContext :: (Monad m, Data a) => a -> MuContext m+mkGenericContext :: (Monad m, Data a, Typeable1 m) => a -> MuContext m mkGenericContext val = toGenTemp val ~> convertGenTempToContext data TD m = @@ -100,12 +110,12 @@ | TUnknown deriving (Show) -toGenTemp :: (Data a, Monad m) => a -> TD m+toGenTemp :: (Data a, Monad m, Typeable1 m) => a -> TD m toGenTemp a = zip fields (gmapQ procField a) ~> TObj where fields = toConstr a ~> constrFields -procField :: (Data a, Monad m) => a -> TD m+procField :: (Data a, Monad m, Typeable1 m) => a -> TD m procField = obj `ext1Q` list@@ -131,13 +141,25 @@ `extQ` (\(i::Bool) -> MuBool i ~> TSimple) `extQ` muLambdaBS `extQ` muLambdaS+ `extQ` muLambdaMBS+ `extQ` muLambdaMS where obj a = case dataTypeRep (dataTypeOf a) of AlgRep [c] -> toGenTemp a _ -> TUnknown list a = map procField a ~> TList++ muLambdaMBS :: (BS.ByteString -> m BS.ByteString) -> TD m+ muLambdaMBS f = MuLambdaM f ~> TSimple++ muLambdaMS :: forall m. Monad m => (String -> m String) -> TD m+ muLambdaMS f = MuLambdaM fd ~> TSimple+ where+ fd s = decodeStr s ~> f >>= return . encodeStr+ muLambdaBS :: (BS.ByteString -> BS.ByteString) -> TD m muLambdaBS f = MuLambda f ~> TSimple+ muLambdaS :: (String -> String) -> TD m muLambdaS f = MuLambda fd ~> TSimple where
hastache.cabal view
@@ -1,5 +1,5 @@ name: hastache-version: 0.1.5+version: 0.1.6 license: BSD3 license-file: LICENSE category: Text
tests/test.hs view
@@ -251,7 +251,9 @@ someDataList :: [Int], someDataObjList :: [InternalData], someMuLambdaBS :: BS.ByteString -> BS.ByteString,- someMuLambdaS :: String -> String+ someMuLambdaS :: String -> String,+ someMuLambdaMBS :: BS.ByteString -> IO BS.ByteString,+ someMuLambdaMS :: String -> IO String } deriving (Data, Typeable) @@ -278,6 +280,8 @@ \{{/someDataObjList}}\n\ \{{#someMuLambdaBS}}reverse{{/someMuLambdaBS}}\n\ \{{#someMuLambdaS}}upper{{/someMuLambdaS}}\n\+ \{{#someMuLambdaMBS}}reverse in IO lambda{{/someMuLambdaMBS}}\n\+ \{{#someMuLambdaMS}}upper in IO lambda{{/someMuLambdaMS}}\n\ \text 2\n\ \" context = SomeData {@@ -288,7 +292,9 @@ someDataObjList = [InternalData "a" 1, InternalData "b" 2, InternalData "c" 3], someMuLambdaBS = BS.reverse,- someMuLambdaS = map toUpper+ someMuLambdaS = map toUpper,+ someMuLambdaMBS = return . BS.reverse,+ someMuLambdaMS = return . map toUpper } testRes = "\@@ -306,6 +312,8 @@ \* c : 3 \n\ \esrever\n\ \UPPER\n\+ \adbmal OI ni esrever\n\+ \UPPER IN IO LAMBDA\n\ \text 2\n\ \" @@ -334,6 +342,7 @@ \ * elem 2. top\n\ \" +-- Up-level context from nested block (Generic version) data TopData = TopData { topDataTop :: String, topDataItems :: [NestedData]@@ -345,7 +354,6 @@ } deriving (Data, Typeable) --- Up-level context from nested block (Generic version) nestedGenericContextTest = do res <- hastacheStr defaultConfig (encodeStr template) context assertEqualStr "result correctness" (decodeStrLBS res) testRes