私たちの Hakyll コードベースのために、いくつかのヘルパー メソッドを作成し、新しいものにいくつかの HSpec 単体テストを追加し始めました。
-- | Reject an item unless @fieldName@ is set to "true"
unlessEnabled :: MonadMetadata m
=> String
-> Item a
-> m Bool
unlessEnabled fieldName item = do
maybeValue <- getMetadataBool (itemIdentifier item) fieldName
return $ maybe True not maybeValue
-- | Try to look up a boolean field ("true" maps to @Just True@)
getMetadataBool :: MonadMetadata m
=> Identifier
-> String
-> m (Maybe Bool)
getMetadataBool ident name = do
maybeString <- getMetadataField ident name
return $ ((== "true") . map toLower) <$> maybeString
Item
テスト用にorを作成するのは簡単ですが、Hspec を実行するときにIdentifier
をどこに使用すればよいかわかりません。MonadMetadata
私はそれがコピー可能/有用かもしれない(インスタンスを持っているtestCompiler
)ように感じるのを見てきましたが、私はここで私のHaskellの深さから外れています...Compiler
MonadMetadata