on master help sign in
Add utility getMetadataField
a48b53cJasper Van der Jeugt
src/Hakyll/Core/Metadata.hs+22
@@ -2,6 +2,8 @@
2module Hakyll.Core.Metadata
2module Hakyll.Core.Metadata
3 ( Metadata
3 ( Metadata
4 , MonadMetadata (..)
4 , MonadMetadata (..)
5+ , getMetadataField
6+ , getMetadataField'
5 , makePatternDependency
7 , makePatternDependency
6 ) where
8 ) where
7
9
@@ -9,6 +11,7 @@ module Hakyll.Core.Metadata
9--------------------------------------------------------------------------------
11--------------------------------------------------------------------------------
10import Control.Monad (forM)
12import Control.Monad (forM)
11import Data.Map (Map)
13import Data.Map (Map)
14+import qualified Data.Map as M
12
15
13
16
14--------------------------------------------------------------------------------
17--------------------------------------------------------------------------------
@@ -34,6 +37,25 @@ class Monad m => MonadMetadata m where
34 return (id', metadata)
37 return (id', metadata)
35
38
36
39
40+--------------------------------------------------------------------------------
41+getMetadataField :: MonadMetadata m => Identifier -> String -> m (Maybe String)
42+getMetadataField identifier key = do
43+ metadata <- getMetadata identifier
44+ return $ M.lookup key metadata
45+
46+
47+--------------------------------------------------------------------------------
48+-- | Version of 'getMetadataField' which throws an error if the field does not
49+-- exist.
50+getMetadataField' :: MonadMetadata m => Identifier -> String -> m String
51+getMetadataField' identifier key = do
52+ field <- getMetadataField identifier key
53+ case field of
54+ Just v -> return v
55+ Nothing -> fail $ "Hakyll.Core.Metadata.getMetadataField': " ++
56+ "Item " ++ show identifier ++ " has no metadata field " ++ show key
57+
58+
37--------------------------------------------------------------------------------
59--------------------------------------------------------------------------------
38makePatternDependency :: MonadMetadata m => Pattern -> m Dependency
60makePatternDependency :: MonadMetadata m => Pattern -> m Dependency
39makePatternDependency pattern = do
61makePatternDependency pattern = do
src/Hakyll/Web/Template/Context.hs+2−2
@@ -100,8 +100,8 @@ bodyField key = field key $ return . itemBody
100-- | Map any field to its metadata value, if present
100-- | Map any field to its metadata value, if present
101metadataField :: Context String
101metadataField :: Context String
102metadataField = Context $ \k i -> do
102metadataField = Context $ \k i -> do
103− metadata <- getMetadata $ itemIdentifier i
103+ value <- getMetadataField (itemIdentifier i) k
104− maybe empty return $ M.lookup k metadata
104+ maybe empty return value
105
105
106
106
107--------------------------------------------------------------------------------
107--------------------------------------------------------------------------------