hastache 0.1.3 → 0.1.4
raw patch · 3 files changed
+40/−15 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- Text/Hastache/Context.hs +21/−5
- hastache.cabal +2/−2
- tests/test.hs +17/−8
Text/Hastache/Context.hs view
@@ -21,9 +21,9 @@ import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as LBS+import qualified Data.Map as Map import qualified Data.Text as Text import qualified Data.Text.Lazy as LText-import qualified Data.Map as Map import Text.Hastache @@ -48,8 +48,10 @@ intField :: Int, dataField :: InternalData, simpleListField :: [String],- dataListField :: [InternalData]- } deriving (Data, Typeable, Show)+ dataListField :: [InternalData],+ stringFunc :: String -> String,+ byteStringFunc :: Data.ByteString.ByteString -> Data.ByteString.ByteString+ } deriving (Data, Typeable) example = hastacheStr defaultConfig (encodeStr template) (mkGenericContext context)@@ -63,10 +65,14 @@ \"data list: \\n\", \"{{#dataListField}}\\n\", \" * {{someField}}, {{anotherField}} \\n\",- \"{{/dataListField}}\\n\"]+ \"{{/dataListField}}\\n\",+ \"{{#stringFunc}}upper{{/stringFunc}} \\n\",+ \"{{#byteStringFunc}}reverse{{/byteStringFunc}} \\n\"] context = Example { stringField = \"string value\", intField = 1, dataField = InternalData \"val\" 123, simpleListField = [\"a\",\"b\",\"c\"],- dataListField = [InternalData \"aaa\" 1, InternalData \"bbb\" 2] }+ dataListField = [InternalData \"aaa\" 1, InternalData \"bbb\" 2],+ stringFunc = map Data.Char.toUpper,+ byteStringFunc = Data.ByteString.reverse } @ Result:@@ -80,6 +86,8 @@ data list: * aaa, 1 * bbb, 2 +UPPER +esrever @ -} mkGenericContext :: (Monad m, Data a) => a -> MuContext m@@ -121,11 +129,19 @@ `extQ` (\(i::Text.Text) -> MuVariable i ~> TSimple) `extQ` (\(i::LText.Text) -> MuVariable i ~> TSimple) `extQ` (\(i::Bool) -> MuBool i ~> TSimple)+ `extQ` muLambdaBS+ `extQ` muLambdaS where obj a = case dataTypeRep (dataTypeOf a) of AlgRep [c] -> toGenTemp a _ -> TUnknown list a = map procField a ~> TList+ muLambdaBS :: (BS.ByteString -> BS.ByteString) -> TD m+ muLambdaBS f = MuLambda f ~> TSimple+ muLambdaS :: (String -> String) -> TD m+ muLambdaS f = MuLambda fd ~> TSimple+ where+ fd s = decodeStr s ~> f ~> encodeStr convertGenTempToContext :: TD t -> MuContext t convertGenTempToContext v = mkMap "" Map.empty v ~> mkMapContext
hastache.cabal view
@@ -1,5 +1,5 @@ name: hastache-version: 0.1.3+version: 0.1.4 license: BSD3 license-file: LICENSE category: Text@@ -7,7 +7,7 @@ author: Sergey S Lymar <sergey.lymar@gmail.com> maintainer: Sergey S Lymar <sergey.lymar@gmail.com> stability: experimental-tested-with: GHC == 7.0.2+tested-with: GHC == 7.0.2, GHC == 7.0.3 synopsis: Haskell implementation of Mustache templates cabal-version: >= 1.8 homepage: http://github.com/lymar/hastache
tests/test.hs view
@@ -1,16 +1,17 @@ {-# LANGUAGE DeriveDataTypeable #-} module Tests where +import Control.Monad+import Control.Monad.Writer+import Data.Char+import Data.Data+import Data.Generics import Test.HUnit import Text.Hastache import Text.Hastache.Context import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as LZ import qualified Data.Text as T-import Control.Monad-import Control.Monad.Writer-import Data.Data-import Data.Generics -- Hastache comments commentsTest = do@@ -242,15 +243,17 @@ intDataField1 :: String, intDataField2 :: Int }- deriving (Data, Typeable, Show)+ deriving (Data, Typeable) data SomeData = SomeData { someDataField1 :: String, someDataInternal :: InternalData, someDataList :: [Int],- someDataObjList :: [InternalData]+ someDataObjList :: [InternalData],+ someMuLambdaBS :: BS.ByteString -> BS.ByteString,+ someMuLambdaS :: String -> String }- deriving (Data, Typeable, Show)+ deriving (Data, Typeable) -- Make hastache context from Data.Data deriving type genericContextTest = do@@ -273,6 +276,8 @@ \{{#someDataObjList}}\n\ \* {{intDataField1}} : {{intDataField2}} \n\ \{{/someDataObjList}}\n\+ \{{#someMuLambdaBS}}reverse{{/someMuLambdaBS}}\n\+ \{{#someMuLambdaS}}upper{{/someMuLambdaS}}\n\ \text 2\n\ \" context = SomeData {@@ -281,7 +286,9 @@ intDataField1 = "zzz", intDataField2 = 100 }, someDataList = [1,2,3], someDataObjList = [InternalData "a" 1, InternalData "b" 2,- InternalData "c" 3]+ InternalData "c" 3],+ someMuLambdaBS = BS.reverse,+ someMuLambdaS = map toUpper } testRes = "\@@ -297,6 +304,8 @@ \* a : 1 \n\ \* b : 2 \n\ \* c : 3 \n\+ \esrever\n\+ \UPPER\n\ \text 2\n\ \"