packages feed

bamboo 2009.5.18 → 2009.5.18.1

raw patch · 3 files changed

+67/−1 lines, 3 files

Files

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++