packages feed

glabrous 0.2.3 → 0.3.0

raw patch · 3 files changed

+40/−23 lines, 3 filesdep ~glabrousPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: glabrous

API changes (from Hackage documentation)

+ Text.Glabrous: toFinalText :: Template -> Text

Files

glabrous.cabal view
@@ -1,10 +1,10 @@ name: glabrous-version: 0.2.3+version: 0.3.0 cabal-version: >=1.10 build-type: Simple license: BSD3 license-file: LICENSE-copyright: (c) 2016 - Michel Boucey+copyright: (c) 2016-2017 - Michel Boucey maintainer: michel.boucey@cybervisible.fr homepage: https://github.com/MichelBoucey/glabrous synopsis: A template DSL library@@ -46,9 +46,9 @@     main-is: hspec.hs     build-depends:         base >=4.8 && <5,-        directory ==1.2.*,+        directory >1.2 && <1.4,         either ==4.4.*,-        glabrous >=0.2.2 && <0.3,+        glabrous >=0.3.0 && <0.4,         hspec >=2.1.10 && <2.4,         text ==1.2.*,         unordered-containers ==0.2.*
src/Text/Glabrous.hs view
@@ -21,10 +21,11 @@   , readTemplateFile    -- ** 'Template' operations-  , toText-  , isFinal   , tagsOf   , tagsRename+  , isFinal+  , toText+  , toFinalText   , compress   , writeTemplateFile @@ -98,8 +99,8 @@  -- | Populate with variables and/or update variables in the given 'Context'. ----- >λ>setVariables [("something","something new"), ("about","Haskell")] context--- >Context {variables = fromList [("etc.","..."),("about","Haskell"),("something","something new"),("name","")]}+-- >λ>setVariables [("tag","replacement"), ("theme","Haskell")] context+-- >Context {variables = fromList [("etc.","..."),("theme","Haskell"),("tag","replacement"),("name","")]} setVariables :: [(T.Text,T.Text)] -> Context -> Context setVariables ts Context{..} =   go ts variables@@ -111,8 +112,8 @@  -- | Delete variables from a 'Context' by these names. ----- >λ>deleteVariables ["something"] context--- >Context {variables = fromList [("etc.","..."),("about","Haskell"),("name","")]}+-- >λ>deleteVariables ["tag"] context+-- >Context {variables = fromList [("etc.","..."),("theme","Haskell"),("name","")]} deleteVariables :: [T.Text] -> Context -> Context deleteVariables ts Context{..} =   go ts variables@@ -124,16 +125,16 @@  -- | Build a 'Context' from a list of 'Tag's and replacement 'T.Text's. ----- >λ>fromList [("something","something else"), ("etc.","...")]--- >Context {variables = fromList [("etc.","..."),("something","something else")]}+-- >λ>fromList [("tag","replacement"), ("etc.","...")]+-- >Context {variables = fromList [("etc.","..."),("tag","replacement")]} -- fromList :: [(T.Text, T.Text)] -> Context fromList ts = Context { variables = H.fromList ts }  -- | Build an unset 'Context' from a list of 'Tag's. ----- >λ>fromTagsList ["something","etc."]--- >Context {variables = fromList [("etc.",""),("something","")]}+-- >λ>fromTagsList ["tag","etc."]+-- >Context {variables = fromList [("etc.",""),("tag","")]} fromTagsList :: [T.Text] -> Context fromTagsList ts = fromList $ (\t -> (t,T.empty)) <$> ts @@ -149,7 +150,7 @@ -- -- @ -- {---     "something": "something else",+--     "tag": "replacement", --     "etc.": "..." -- } -- @@@ -162,7 +163,7 @@ -- -- @ -- {---     "something": "",+--     "tag": "", --     "etc.": "" -- } -- @@@ -202,14 +203,22 @@ writeTemplateFile f t = I.writeFile f $ toText t  -- | Output the content of the given 'Template'--- as it is, with its 'Tag's, if they exist. No--- 'Context' is processed.+-- as it is, with its 'Tag's, if they exist. toText :: Template -> T.Text toText Template{..} =   T.concat $ trans <$> content   where     trans (Literal c) = c     trans (Tag k)     = T.concat ["{{",k,"}}"]++-- | Output the content of the given 'Template'+-- with all its 'Tag's removed.+toFinalText :: Template -> T.Text+toFinalText Template{..} =+  foldl trans T.empty content+  where+    trans o (Literal l) = o `T.append` l+    trans o (Tag _) = o  -- | Get the list of 'Tag's in the given 'Template'. tagsOf :: Template -> [Tag]
tests/hspec.hs view
@@ -40,7 +40,7 @@ main = hspec $ do      describe "writeTemplateFile" $-        it "write a template to a file as it is" $+        it "writes a template to a file as it is" $             writeTemplateFile templateFile $ fromRight' $ fromText templateText      describe "readTemplateFile" $@@ -51,6 +51,14 @@         it "returns the list of tags in a template" $             tagsOf <$> fromRight' <$> readTemplateFile templateFile `shouldReturn` ["ipsum","tortor","lectus","vehicula","bibendum","condimentum","tellus","faucibus","cursus","commodo","vestibulum","lobortis","fermentum","maximus","venenatis","sagittis","vitae","rhoncus"] +    describe "toText" $+        it "returns the template as it is" $+            toText <$> fromRight' <$> readTemplateFile templateFile `shouldReturn` "Affirmanti incumbit probatio. Lorem {{ipsum}} dolor sit amet, consectetur adipiscing elit. Proin bibendum mauris vitae dui venenatis pretium. Maecenas vestibulum justo at accumsan mattis. Nulla id finibus sem. Cras dolor nunc, consectetur in tincidunt id, facilisis in lorem. Nullam sed eros venenatis, tempor felis in, ultrices enim. Donec sit amet ligula ac orci cursus finibus ut eget lectus. Praesent feugiat massa non mi venenatis faucibus. Proin sollicitudin ultrices sapien, eu venenatis purus sollicitudin vel. Donec maximus id ligula in {congue}. Ut neque erat, dictum vehicula justo vel, dapibus facilisis est. Proin elementum finibus magna. Maecenas varius ultrices arcu, et auctor lectus egestas nec. Nulla facilisi. Donec eros urna, mattis viverra dapibus et, aliquet vel {{tortor}}. Etiam rutrum lacinia turpis, vitae faucibus nibh pharetra gravida.\n\nVivamus venenatis nec sapien eu rutrum. Mauris {{lectus}} tortor, suscipit eget tristique in, finibus a augue. Nulla euismod fermentum ligula, eget viverra eros porttitor eget. Integer lacinia id libero vitae laoreet. Vivamus sit amet molestie mi, in posuere diam. Nulla ornare luctus diam, at sodales neque porta ac. Nunc mi lectus, imperdiet in lorem pretium, volutpat {{vehicula}} sem. Aliquam quis orci eu nisl consequat bibendum. Fusce efficitur {{bibendum}} tristique. Integer lacinia turpis sit amet neque imperdiet tempor. Aenean {dolor}} odio, congue sed lorem nec, {{condimentum}} tempor lorem. Ut maximus lorem in augue tincidunt, nec dapibus erat luctus. Vivamus varius vitae lacus sed elementum. Nulla feugiat porttitor dictum. Donec posuere nisl at tincidunt gravida. Fusce semper maximus metus sit amet tempus. Quisque tempus neque ligula, efficitur molestie quam convallis vel. Donec porttitor rutrum {{tellus}}, vel faucibus felis dapibus at. Mauris id tortor {{faucibus}}, tempus velit sit amet, pretium tellus. Aliquam luctus mauris dui,{{cursus}} volutpat quam egestas vel. In vel neque eu eros efficitur aliquam. Donec efficitur tortor massa. Praesent molestie enim justo, ac gravida enim tristique nec. In non rutrum mi. Morbi viverra, mi vestibulum gravida iaculis, nulla ipsum fringilla nisl, at vestibulum nisl neque at est. Proin viverra varius nisi, quis tincidunt odio suscipit nec. Vestibulum nisi justo, fermentum {{commodo}} accumsan id, dictum dictum felis. Fusce rutrum suscipit urna in ornare. Duis volutpat arcu et rutrum pulvinar. Vestibulum mattis scelerisque ligula, ut fermentum ligula. Fusce ut semper ipsum, at {{vestibulum}} felis. Ut semper turpis sit amet diam commodo bibendum. Ut vulputate quam nec massa pretium, vitae sodales quam ultrices. Fusce imperdiet mi sed maximus {{lobortis}}. Donec nulla quam, luctus a placerat vel, scelerisque et lacus. Nulla sagittis ipsum ac viverra eleifend. Praesent et sem ut erat ornare rutrum. Praesent ullamcorper dolor nunc, nec aliquam massa varius sed.\n\nUt luctus ante ut venenatis blandit. Aenean cursus leo non finibus cursus. Suspendisse sed enim hendrerit neque {{fermentum}} rutrum eu ut nulla. Curabitur consequat orci quam, et condimentum lacus rutrum interdum. In in {{maximus}} eros. Duis rhoncus nisi at volutpat aliquam. Quisque vestibulum {{venenatis}} nisi, sed {{sagittis}} est ultrices ut. Morbi quis ipsum {{vitae}} erat mollis egestas nec viverra diam. Aenean imperdiet vestibulum risus vel bibendum. Aenean eget augue luctus, congue erat vel, hendrerit nunc. Ut metus risus, viverra non varius in, {{rhoncus}} sed. Fabricando fit faber."++    describe "toFinalText" $+        it "returns the template as it is" $+            toFinalText <$> fromRight' <$> readTemplateFile templateFile `shouldReturn` "Affirmanti incumbit probatio. Lorem  dolor sit amet, consectetur adipiscing elit. Proin bibendum mauris vitae dui venenatis pretium. Maecenas vestibulum justo at accumsan mattis. Nulla id finibus sem. Cras dolor nunc, consectetur in tincidunt id, facilisis in lorem. Nullam sed eros venenatis, tempor felis in, ultrices enim. Donec sit amet ligula ac orci cursus finibus ut eget lectus. Praesent feugiat massa non mi venenatis faucibus. Proin sollicitudin ultrices sapien, eu venenatis purus sollicitudin vel. Donec maximus id ligula in {congue}. Ut neque erat, dictum vehicula justo vel, dapibus facilisis est. Proin elementum finibus magna. Maecenas varius ultrices arcu, et auctor lectus egestas nec. Nulla facilisi. Donec eros urna, mattis viverra dapibus et, aliquet vel . Etiam rutrum lacinia turpis, vitae faucibus nibh pharetra gravida.\n\nVivamus venenatis nec sapien eu rutrum. Mauris  tortor, suscipit eget tristique in, finibus a augue. Nulla euismod fermentum ligula, eget viverra eros porttitor eget. Integer lacinia id libero vitae laoreet. Vivamus sit amet molestie mi, in posuere diam. Nulla ornare luctus diam, at sodales neque porta ac. Nunc mi lectus, imperdiet in lorem pretium, volutpat  sem. Aliquam quis orci eu nisl consequat bibendum. Fusce efficitur  tristique. Integer lacinia turpis sit amet neque imperdiet tempor. Aenean {dolor}} odio, congue sed lorem nec,  tempor lorem. Ut maximus lorem in augue tincidunt, nec dapibus erat luctus. Vivamus varius vitae lacus sed elementum. Nulla feugiat porttitor dictum. Donec posuere nisl at tincidunt gravida. Fusce semper maximus metus sit amet tempus. Quisque tempus neque ligula, efficitur molestie quam convallis vel. Donec porttitor rutrum , vel faucibus felis dapibus at. Mauris id tortor , tempus velit sit amet, pretium tellus. Aliquam luctus mauris dui, volutpat quam egestas vel. In vel neque eu eros efficitur aliquam. Donec efficitur tortor massa. Praesent molestie enim justo, ac gravida enim tristique nec. In non rutrum mi. Morbi viverra, mi vestibulum gravida iaculis, nulla ipsum fringilla nisl, at vestibulum nisl neque at est. Proin viverra varius nisi, quis tincidunt odio suscipit nec. Vestibulum nisi justo, fermentum  accumsan id, dictum dictum felis. Fusce rutrum suscipit urna in ornare. Duis volutpat arcu et rutrum pulvinar. Vestibulum mattis scelerisque ligula, ut fermentum ligula. Fusce ut semper ipsum, at  felis. Ut semper turpis sit amet diam commodo bibendum. Ut vulputate quam nec massa pretium, vitae sodales quam ultrices. Fusce imperdiet mi sed maximus . Donec nulla quam, luctus a placerat vel, scelerisque et lacus. Nulla sagittis ipsum ac viverra eleifend. Praesent et sem ut erat ornare rutrum. Praesent ullamcorper dolor nunc, nec aliquam massa varius sed.\n\nUt luctus ante ut venenatis blandit. Aenean cursus leo non finibus cursus. Suspendisse sed enim hendrerit neque  rutrum eu ut nulla. Curabitur consequat orci quam, et condimentum lacus rutrum interdum. In in  eros. Duis rhoncus nisi at volutpat aliquam. Quisque vestibulum  nisi, sed  est ultrices ut. Morbi quis ipsum  erat mollis egestas nec viverra diam. Aenean imperdiet vestibulum risus vel bibendum. Aenean eget augue luctus, congue erat vel, hendrerit nunc. Ut metus risus, viverra non varius in,  sed. Fabricando fit faber."+     describe "fromTemplate" $         it "builds a Context from a template" $             fromTemplate <$> fromRight' <$> readTemplateFile templateFile `shouldReturn` Context {variables = H.fromList [("ipsum",""),("lobortis",""),("condimentum",""),("maximus",""),("sagittis",""),("vestibulum",""),("cursus",""),("vehicula",""),("faucibus",""),("vitae",""),("tellus",""),("lectus",""),("tortor",""),("commodo",""),("fermentum",""),("ipsum",""),("rhoncus",""),("bibendum",""),("venenatis","")]}@@ -81,15 +89,15 @@             writeContextFile contextFile acontext      describe "process" $-        it "apply to a template a context to output a text" $+        it "applies to a template a context to output a text" $             (return $ process template' context') `shouldReturn` "Affirmanti incumbit probatio. Lorem  Dolor!  sit amet,  Consectetur!  adipiscing elit. Proin bibendum mauris  Vitae!  dui venenatis pretium. Maecenas vestibulum justo at accumsan  Mattis! . Nulla id finibus sem. Cras dolor nunc, consectetur in tincidunt id, facilisis in lorem. Nullam sed eros venenatis, tempor felis in, ultrices enim. Donec sit amet ligula ac orci cursus finibus ut eget lectus. Praesent feugiat massa non mi venenatis  Faucibus! . Fabricando fit faber."      describe "partialProcess" $-        it "apply to a template a context to output a template" $+        it "applies to a template a context to output a template" $             (return $ partialProcess template' pcontext) `shouldReturn` Template {content = [Literal "Affirmanti incumbit probatio. Lorem ",Literal " Dolor! ",Literal " sit amet, ",Tag "consectetur",Literal " adipiscing elit. Proin bibendum mauris ",Literal " Vitae! ",Literal " dui venenatis pretium. Maecenas vestibulum justo at accumsan ",Tag "mattis",Literal ". Nulla id finibus sem. Cras dolor nunc, consectetur in tincidunt id, facilisis in lorem. Nullam sed eros venenatis, tempor felis in, ultrices enim. Donec sit amet ligula ac orci cursus finibus ut eget lectus. Praesent feugiat massa non mi venenatis ",Literal " Faucibus! ",Literal ". Fabricando fit faber."]}      describe "partialProcess'" $-        it "apply to a template with a subcontext outputs a template with its tags" $+        it "applies to a template with a subcontext outputs a template with its tags" $             (return $ partialProcess' template' pcontext) `shouldReturn` Partial {template = Template {content = [Literal "Affirmanti incumbit probatio. Lorem ",Literal " Dolor! ",Literal " sit amet, ",Tag "consectetur",Literal " adipiscing elit. Proin bibendum mauris ",Literal " Vitae! ",Literal " dui venenatis pretium. Maecenas vestibulum justo at accumsan ",Tag "mattis",Literal ". Nulla id finibus sem. Cras dolor nunc, consectetur in tincidunt id, facilisis in lorem. Nullam sed eros venenatis, tempor felis in, ultrices enim. Donec sit amet ligula ac orci cursus finibus ut eget lectus. Praesent feugiat massa non mi venenatis ",Literal " Faucibus! ",Literal ". Fabricando fit faber."]}, G.context =  Context {variables = H.fromList [("consectetur",""),("mattis","")]}}      describe "compress" $@@ -101,6 +109,6 @@             (return $ tagsRename [("consectetur","causatur"),("mattis","generis")] $ compress $ partialProcess template' pcontext) `shouldReturn` Template {content = [Literal "Affirmanti incumbit probatio. Lorem  Dolor!  sit amet, ",Tag "causatur",Literal " adipiscing elit. Proin bibendum mauris  Vitae!  dui venenatis pretium. Maecenas vestibulum justo at accumsan ",Tag "generis",Literal ". Nulla id finibus sem. Cras dolor nunc, consectetur in tincidunt id, facilisis in lorem. Nullam sed eros venenatis, tempor felis in, ultrices enim. Donec sit amet ligula ac orci cursus finibus ut eget lectus. Praesent feugiat massa non mi venenatis  Faucibus! . Fabricando fit faber."]}      describe "partialProcess'" $ afterAll_ clean $-        it "apply to a template with a context outputs a final text" $+        it "applies to a template with a context outputs a final text" $             (return $ partialProcess' template' context') `shouldReturn` Final "Affirmanti incumbit probatio. Lorem  Dolor!  sit amet,  Consectetur!  adipiscing elit. Proin bibendum mauris  Vitae!  dui venenatis pretium. Maecenas vestibulum justo at accumsan  Mattis! . Nulla id finibus sem. Cras dolor nunc, consectetur in tincidunt id, facilisis in lorem. Nullam sed eros venenatis, tempor felis in, ultrices enim. Donec sit amet ligula ac orci cursus finibus ut eget lectus. Praesent feugiat massa non mi venenatis  Faucibus! . Fabricando fit faber."