on master help sign in
Merge pull request #142 from justnoxx/master

Added isMember function.

commit3ac3037ec9f93a7bd368e4a135ce65d7590c7f37 authorJasper Van der Jeugt <jaspervdj@gmail.com> dateSat 4 May 2013, 06:14 (13 years ago) parent4100083f4ee3e7
3 files changed+40−7
src/Hakyll/Core/Provider/MetadataCache.hs+3−7 src/Hakyll/Core/Store.hs+21 tests/Hakyll/Core/Store/Tests.hs+16
src/Hakyll/Core/Provider/MetadataCache.hs+3−7
@@ -8,7 +8,7 @@ module Hakyll.Core.Provider.MetadataCache
88
99--------------------------------------------------------------------------------
1010import qualified Data.Map as M
11−
11+import Control.Monad (unless)
1212
1313--------------------------------------------------------------------------------
1414import Hakyll.Core.Identifier
@@ -49,12 +49,8 @@ resourceInvalidateMetadataCache p r = do
4949--------------------------------------------------------------------------------
5050load :: Provider -> Identifier -> IO ()
5151load p r = do
52− mmd <- Store.get store mdk :: IO (Store.Result Metadata)
53− case mmd of
54− -- Already loaded
55− Store.Found _ -> return ()
56− -- Not yet loaded
57− _ -> do
52+ mmof <- Store.isMember store mdk
53+ unless mmof $ do
5854 (md, body) <- loadMetadata p r
5955 Store.set store mdk md
6056 Store.set store bk body
src/Hakyll/Core/Store.hs+21
@@ -9,6 +9,7 @@ module Hakyll.Core.Store
99 , new
1010 , set
1111 , get
12+ , isMember
1213 , delete
1314 , hash
1415 ) where
@@ -100,6 +101,16 @@ cacheLookup (Store _ (Just lru)) key = do
100101 Nothing -> WrongType (typeOf (undefined :: a)) (typeOf x)
101102
102103
104+--------------------------------------------------------------------------------
105+cacheIsMember :: Store -> String -> IO Bool
106+cacheIsMember (Store _ Nothing) _ = return False
107+cacheIsMember (Store _ (Just lru)) key = do
108+ res <- Lru.lookup key lru
109+ case res of
110+ Nothing -> return False
111+ _ -> return True
112+
113+
103114--------------------------------------------------------------------------------
104115-- | Auxiliary: delete an item from the in-memory cache
105116cacheDelete :: Store -> String -> IO ()
@@ -151,6 +162,16 @@ get store identifier = do
151162 return $ decode lbs
152163
153164
165+--------------------------------------------------------------------------------
166+-- | Strict function
167+isMember :: Store -> [String] -> IO Bool
168+isMember store identifier = do
169+ inCache <- cacheIsMember store key
170+ if inCache then return True else doesFileExist path
171+ where
172+ key = hash identifier
173+ path = storeDirectory store </> key
174+
154175--------------------------------------------------------------------------------
155176-- | Delete an item
156177delete :: Store -> [String] -> IO ()
tests/Hakyll/Core/Store/Tests.hs+16
@@ -26,6 +26,7 @@ tests = testGroup "Hakyll.Core.Store.Tests"
2626 [ testProperty "simple get . set" simpleSetGet
2727 , testProperty "persistent get . set" persistentSetGet
2828 , testCase "WrongType get . set" wrongType
29+ , testCase "isMembertest . set" isMembertest
2930 ]
3031
3132
@@ -68,3 +69,18 @@ wrongType = do
6869 t == typeOf (undefined :: String)
6970 _ -> False
7071 cleanTestEnv
72+
73+
74+--------------------------------------------------------------------------------
75+
76+isMembertest :: H.Assertion
77+isMembertest = do
78+ store <- newTestStore
79+ Store.set store ["foo", "bar"] ("qux" :: String)
80+ --value <- Store.get store ["foo", "bar"] :: IO (Store.Result Int)
81+ good <- Store.isMember store ["foo", "bar"]
82+
83+ bad <- Store.isMember store ["foo", "baz"]
84+ H.assert good
85+ H.assert (not bad)
86+ cleanTestEnv