From 6fbffc586cd951180c5a4ed328bd43a1f3920a85 Mon Sep 17 00:00:00 2001 From: "Nikolaos S. Papaspyrou" Date: Mon, 31 Oct 2016 10:36:41 +0200 Subject: Fix integer fields in YAML metadata If a numeric field contains an integer number, it should be shown as an integer number. Without this patch, the field: answer = 42 would be shown as "42.0". Before the introduction of YAML in metadata, this was treated as a string and therefore shown as just "42". This patch reinstates the older (and IMHO correct) behavior. --- src/Data/Yaml/Extended.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Data/Yaml/Extended.hs b/src/Data/Yaml/Extended.hs index 099e945..1600bab 100644 --- a/src/Data/Yaml/Extended.hs +++ b/src/Data/Yaml/Extended.hs @@ -7,12 +7,14 @@ module Data.Yaml.Extended import qualified Data.Text as T import qualified Data.Vector as V import Data.Yaml +import Data.Scientific toString :: Value -> Maybe String toString (String t) = Just (T.unpack t) toString (Bool True) = Just "true" toString (Bool False) = Just "false" -toString (Number d) = Just (show d) +toString (Number d) | isInteger d = Just (formatScientific Fixed (Just 0) d) + | otherwise = Just (show d) toString _ = Nothing toList :: Value -> Maybe [Value] -- cgit v1.2.3 From 3aa07ea334f14df19019947c2eef37b34bae2625 Mon Sep 17 00:00:00 2001 From: "Nikolaos S. Papaspyrou" Date: Mon, 31 Oct 2016 14:45:13 +0200 Subject: Add comment --- src/Data/Yaml/Extended.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Data/Yaml/Extended.hs b/src/Data/Yaml/Extended.hs index 1600bab..c940ff7 100644 --- a/src/Data/Yaml/Extended.hs +++ b/src/Data/Yaml/Extended.hs @@ -13,6 +13,8 @@ toString :: Value -> Maybe String toString (String t) = Just (T.unpack t) toString (Bool True) = Just "true" toString (Bool False) = Just "false" +-- | Make sure that numeric fields containing integer numbers are shown as +-- | integers (i.e., "42" instead of "42.0"). toString (Number d) | isInteger d = Just (formatScientific Fixed (Just 0) d) | otherwise = Just (show d) toString _ = Nothing -- cgit v1.2.3 From f9f8603c323159510bc56e8d39d7cc0ae9ab3056 Mon Sep 17 00:00:00 2001 From: "Nikolaos S. Papaspyrou" Date: Mon, 31 Oct 2016 15:00:09 +0200 Subject: Add test --- tests/Hakyll/Web/Template/Tests.hs | 1 + tests/data/example.md.metadata | 2 ++ tests/data/just-meta.html | 7 +++++++ tests/data/just-meta.html.out | 7 +++++++ 4 files changed, 17 insertions(+) create mode 100644 tests/data/just-meta.html create mode 100644 tests/data/just-meta.html.out diff --git a/tests/Hakyll/Web/Template/Tests.hs b/tests/Hakyll/Web/Template/Tests.hs index 1f3b25d..054a9bd 100644 --- a/tests/Hakyll/Web/Template/Tests.hs +++ b/tests/Hakyll/Web/Template/Tests.hs @@ -29,6 +29,7 @@ tests :: TestTree tests = testGroup "Hakyll.Core.Template.Tests" $ concat [ [ testCase "case01" $ test ("template.html.out", "template.html", "example.md") , testCase "case02" $ test ("strip.html.out", "strip.html", "example.md") + , testCase "case03" $ test ("just-meta.html.out", "just-meta.html", "example.md") , testCase "applyJoinTemplateList" testApplyJoinTemplateList ] diff --git a/tests/data/example.md.metadata b/tests/data/example.md.metadata index 5d463ae..57756c2 100644 --- a/tests/data/example.md.metadata +++ b/tests/data/example.md.metadata @@ -1,3 +1,5 @@ external: External data date: 2012-10-22 14:35:24 subblog: food +intfield: 42 +numfield: 3.14 diff --git a/tests/data/just-meta.html b/tests/data/just-meta.html new file mode 100644 index 0000000..94a8e09 --- /dev/null +++ b/tests/data/just-meta.html @@ -0,0 +1,7 @@ +
+external: {$external$}
+date: {$date$}
+subblog: {$subblog$}
+intfield: {$intfield$}
+numfield: {$numfield$}
+
diff --git a/tests/data/just-meta.html.out b/tests/data/just-meta.html.out new file mode 100644 index 0000000..4521f59 --- /dev/null +++ b/tests/data/just-meta.html.out @@ -0,0 +1,7 @@ +
+external: {External data}
+date: {2012-10-22 14:35:24}
+subblog: {food}
+intfield: {42}
+numfield: {3.14}
+
-- cgit v1.2.3