From 46b6f78da8ed814bef6972f4712d8b13e76c1122 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Fri, 18 Oct 2013 01:23:14 +0400 Subject: Added test case for global metadata --- tests/data/metadata | 27 ++++++++++++++++++++++ tests/data/posts/2013-10-18-metadata-test.md | 4 ++++ .../posts/2013-10-18-metadata-test.md.metadata | 2 ++ tests/data/posts/metadata | 18 +++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 tests/data/metadata create mode 100644 tests/data/posts/2013-10-18-metadata-test.md create mode 100644 tests/data/posts/2013-10-18-metadata-test.md.metadata create mode 100644 tests/data/posts/metadata (limited to 'tests/data') diff --git a/tests/data/metadata b/tests/data/metadata new file mode 100644 index 0000000..1145976 --- /dev/null +++ b/tests/data/metadata @@ -0,0 +1,27 @@ +--- posts/2013-10-18-metadata-test.md +a1: 8 +a2: 8 +a3: 8 +a4: 8 +a5: 8 +a6: 8 +a7: 8 +a8: 8 + +--- posts/* +a1: 7 +a2: 7 +a3: 7 +a4: 7 +a5: 7 +a6: 7 +a7: 7 + +--- ** +a1: 6 +a2: 6 +a3: 6 +a4: 6 +a5: 6 +a6: 6 + diff --git a/tests/data/posts/2013-10-18-metadata-test.md b/tests/data/posts/2013-10-18-metadata-test.md new file mode 100644 index 0000000..86a3e67 --- /dev/null +++ b/tests/data/posts/2013-10-18-metadata-test.md @@ -0,0 +1,4 @@ +--- +a1: 1 +--- +Nothing interesting here. diff --git a/tests/data/posts/2013-10-18-metadata-test.md.metadata b/tests/data/posts/2013-10-18-metadata-test.md.metadata new file mode 100644 index 0000000..7ee78b6 --- /dev/null +++ b/tests/data/posts/2013-10-18-metadata-test.md.metadata @@ -0,0 +1,2 @@ +a1: 2 +a2: 2 diff --git a/tests/data/posts/metadata b/tests/data/posts/metadata new file mode 100644 index 0000000..e5cd153 --- /dev/null +++ b/tests/data/posts/metadata @@ -0,0 +1,18 @@ +--- ** +a1: 5 +a2: 5 +a3: 5 +a4: 5 +a5: 5 + +--- * +a1: 4 +a2: 4 +a3: 4 +a4: 4 + +--- 2013-10-18-metadata-test.md +a1: 3 +a2: 3 +a3: 3 + -- cgit v1.2.3 From dbabe0325b9d7bca3b14c2b33e686b8151fa79aa Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Wed, 22 Jan 2014 00:11:51 +0400 Subject: Unified code for global and external metadata Didn't clean up unused code though --- src/Hakyll/Core/Metadata.hs | 3 ++- src/Hakyll/Core/Provider/Metadata.hs | 12 +++++++----- src/Hakyll/Core/Rules/Default.hs | 1 + tests/data/posts/metadata | 2 ++ 4 files changed, 12 insertions(+), 6 deletions(-) (limited to 'tests/data') diff --git a/src/Hakyll/Core/Metadata.hs b/src/Hakyll/Core/Metadata.hs index a330636..a123c18 100644 --- a/src/Hakyll/Core/Metadata.hs +++ b/src/Hakyll/Core/Metadata.hs @@ -67,7 +67,8 @@ makePatternDependency pattern = do -------------------------------------------------------------------------------- -- | Returns a list of all directory-wise metadata files, subdir first, global last metadataFiles :: Identifier -> [Identifier] -metadataFiles = go . takeDirectory . toFilePath where +metadataFiles identifier = local : go (takeDirectory $ toFilePath identifier) where go "." = [fromFilePath "metadata"] go dir = fromFilePath (dir "metadata") : go (takeDirectory dir) + local = fromFilePath $ toFilePath identifier ++ ".metadata" diff --git a/src/Hakyll/Core/Provider/Metadata.hs b/src/Hakyll/Core/Provider/Metadata.hs index a54b84a..889291f 100644 --- a/src/Hakyll/Core/Provider/Metadata.hs +++ b/src/Hakyll/Core/Provider/Metadata.hs @@ -46,7 +46,7 @@ loadMetadata p identifier = do gmd <- loadGlobalMetadata p identifier - return (M.unions [md, emd, gmd], body) + return (M.unions [md, gmd], body) where normal = setVersion Nothing identifier fp = resourceFilePath p identifier @@ -154,11 +154,13 @@ loadGlobalMetadata p fp = liftM M.fromList $ loadgm fp where concatMap snd . filter (flip matches fp . fromGlob . normalise . combine dir . fst) namedMetadata :: Parser [(String, [(String, String)])] -namedMetadata = P.many namedMetadataBlock +namedMetadata = liftA2 (:) (namedMetadataBlock False) $ P.many $ namedMetadataBlock True -namedMetadataBlock :: Parser (String, [(String, String)]) -namedMetadataBlock = do - name <- P.many1 (P.char '-') *> P.many inlineSpace *> P.manyTill P.anyChar newline +namedMetadataBlock :: Bool -> Parser (String, [(String, String)]) +namedMetadataBlock isNamed = do + name <- if isNamed + then P.many1 (P.char '-') *> P.many inlineSpace *> P.manyTill P.anyChar newline + else pure "**" metadata' <- metadata P.skipMany P.space return (name, metadata') diff --git a/src/Hakyll/Core/Rules/Default.hs b/src/Hakyll/Core/Rules/Default.hs index ccca1bd..fee78c5 100644 --- a/src/Hakyll/Core/Rules/Default.hs +++ b/src/Hakyll/Core/Rules/Default.hs @@ -14,6 +14,7 @@ internalRules :: Rules () internalRules = do match "metadata" $ compile $ makeItem () match "**/metadata" $ compile $ makeItem () + match "**.metadata" $ compile $ makeItem () -------------------------------------------------------------------------------- addMetadataDependencies :: Compiler () diff --git a/tests/data/posts/metadata b/tests/data/posts/metadata index e5cd153..4a1be71 100644 --- a/tests/data/posts/metadata +++ b/tests/data/posts/metadata @@ -16,3 +16,5 @@ a1: 3 a2: 3 a3: 3 +--- nonexistent +a3: 0 -- cgit v1.2.3