on master help sign in
Add utility getMetadataField
commita48b53c385192dd21e4a49269206cdd5cdc45757 authorJasper Van der Jeugt <m@jaspervdj.be> dateThu 7 Mar 2013, 11:18 (14 years ago) parentbe7a5e6
2 files changed+24−2
src/Hakyll/Core/Metadata.hs+22 src/Hakyll/Web/Template/Context.hs+2−2
src/Hakyll/Core/Metadata.hs+22
@@ -2,6 +2,8 @@
22module Hakyll.Core.Metadata
33 ( Metadata
44 , MonadMetadata (..)
5+ , getMetadataField
6+ , getMetadataField'
57 , makePatternDependency
68 ) where
79
@@ -9,6 +11,7 @@ module Hakyll.Core.Metadata
911--------------------------------------------------------------------------------
1012import Control.Monad (forM)
1113import Data.Map (Map)
14+import qualified Data.Map as M
1215
1316
1417--------------------------------------------------------------------------------
@@ -34,6 +37,25 @@ class Monad m => MonadMetadata m where
3437 return (id', metadata)
3538
3639
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+
3759--------------------------------------------------------------------------------
3860makePatternDependency :: MonadMetadata m => Pattern -> m Dependency
3961makePatternDependency pattern = do
src/Hakyll/Web/Template/Context.hs+2−2
@@ -100,8 +100,8 @@ bodyField key = field key $ return . itemBody
100100-- | Map any field to its metadata value, if present
101101metadataField :: Context String
102102metadataField = Context $ \k i -> do
103− metadata <- getMetadata $ itemIdentifier i
104− maybe empty return $ M.lookup k metadata
103+ value <- getMetadataField (itemIdentifier i) k
104+ maybe empty return value
105105
106106
107107--------------------------------------------------------------------------------