bamboo 2009.5.18 → 2009.5.18.1
raw patch · 3 files changed
+67/−1 lines, 3 files
Files
- bamboo.cabal +2/−1
- changelog.md +8/−0
- src/Bamboo/Type/Cache.hs +57/−0
bamboo.cabal view
@@ -1,5 +1,5 @@ Name: bamboo-Version: 2009.5.18+Version: 2009.5.18.1 Build-type: Simple Synopsis: A simple blog middleware on hack Description: A simple blog middleware on hack@@ -47,6 +47,7 @@ Bamboo.Type.StaticWidget Bamboo.Type.Reader Bamboo.Type.Extension+ Bamboo.Type.Cache Bamboo.View.Atom.Tag Bamboo.View.Atom.Post
changelog.md view
@@ -1,3 +1,11 @@+2009.5.18.1+-----------++### Fix++* Add Type.Cache to cabal++ 2009.5.18 ---------
+ src/Bamboo/Type/Cache.hs view
@@ -0,0 +1,57 @@+{-# LANGUAGE NoImplicitPrelude #-}+module Bamboo.Type.Cache (cache, cache'') where++import Bamboo.Helper.Env hiding (body, name, get)+import qualified Bamboo.Config.Global as G++import qualified Data.ByteString.Char8 as C+import qualified Database.TokyoCabinet as TC+import Data.ByteString.Char8 (ByteString)+ +pack = u2b > C.pack+unpack = C.unpack > b2u +cache_file = G.cache_uri++set k v = TC.runTCM $ putsample cache_file [(k.pack, v.pack)]+get k = do+ v <- TC.runTCM $ getsample cache_file (k.pack)+ return $ v ^ unpack++cache g f x =+ if G.use_cache + then cache' g f x+ else f x++cache'' _ f x = f x++-- etag generator -> value function -> model -> value+cache' :: (a -> IO String) -> (a -> IO String) -> a -> (IO String)+cache' g f x = do+ k <- g x+ c <- get k+ case c of + Nothing -> do+ v <- f x+ set k v+ return v+ Just v -> do+ -- putStrLn $ "Cached: " ++ (v.take 20.u2b)+ return v+++putsample :: String -> [(ByteString, ByteString)] -> TC.TCM Bool+putsample file kv =+ do tc <- TC.new :: TC.TCM TC.HDB -- alternatively you can use BDB or FDB+ TC.open tc file [TC.OWRITER, TC.OCREAT]+ mapM (uncurry $ TC.put tc) kv+ TC.close tc++getsample :: String -> ByteString -> TC.TCM (Maybe ByteString)+getsample file key =+ do tc <- TC.new :: TC.TCM TC.HDB -- alternatively you can use BDB or FDB+ TC.open tc file [TC.OREADER]+ val <- TC.get tc key+ TC.close tc+ return val++