packages feed

cgi-utils 0.1 → 0.2

raw patch · 2 files changed

+16/−9 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Network.CGI.Session: instance MonadCGI SessionM

Files

cgi-utils.cabal view
@@ -1,5 +1,5 @@ Name: cgi-utils-Version: 0.1+Version: 0.2 Maintainer: Chris Done (chrisdone@gmail.com) Author: Chris Done (chrisdone@gmail.com) Copyright: 2010 Chris Done@@ -16,3 +16,5 @@   Exposed-Modules: Network.CGI.Session   Hs-Source-Dirs: src   Build-Depends: base >= 2 && < 4, cgi, random, containers, mtl+  Extensions: TypeSynonymInstances+  GHC-Options: -Wall
src/Network/CGI/Session.hs view
@@ -33,6 +33,7 @@ import System.IO (openBinaryFile,IOMode(ReadMode),hGetBuf,hClose) import System.Random (mkStdGen,StdGen,randomRs) import qualified Network.CGI as CGI+import Network.CGI.Monad   (MonadCGI(cgiGet,cgiAddHeader))  -------------------------------------------------------------------------------- -- Section: Sessions implementation@@ -42,6 +43,10 @@ -- | A simple Session monad. Recommend you define your own. type SessionM = StateT Session (CGI.CGIT IO) +instance MonadCGI SessionM where+    cgiAddHeader = (lift .) . cgiAddHeader+    cgiGet = lift . cgiGet+ -- | Initialise a session state and start a F/CGI process. This is a --   bit of a pattern so I've included it here for convenience. runSessionCGI :: SessionName@@ -56,7 +61,7 @@  -- | Simple session runner. runSession :: Sessions -> SessionM a -> Session -> CGI.CGI a-runSession sessions = evalStateT+runSession _ = evalStateT  -- | Session value getter. sessionGet :: Read a => String -> SessionM (Maybe a)@@ -115,15 +120,15 @@ initSession sessionName var = do   s <- getSession sessionName var   case s of-    Just s  -> return s+    Just s'  -> return s'     Nothing -> makeSession sessionName var  -- | Create a new session and update the Mvar. makeSession :: SessionName -> Sessions -> CGI.CGI Session makeSession sessionName var = do-  sess <- liftIO $ modifyMVar var $ \state@(id:ids,sessions) ->-                let session = Session id M.empty-                    newState = (ids,M.insert id session sessions)+  sess <- liftIO $ modifyMVar var $ \(id':ids,sessions) ->+                let session = Session id' M.empty+                    newState = (ids,M.insert id' session sessions)                 in return (newState,session)   CGI.setCookie (CGI.newCookie sessionName $ show $ sess_id sess)          { CGI.cookiePath = Just "/" }@@ -133,11 +138,11 @@ getSession :: SessionName -> Sessions -> CGI.CGI (Maybe Session) getSession sessionName var = do   sId <- CGI.readCookie sessionName-  (ids,sessions) <- liftIO $ readMVar var+  (_,sessions) <- liftIO $ readMVar var   return $ sId >>= flip M.lookup sessions  -- | Update a session in the map. updateSession :: Sessions -> Session -> CGI.CGI ()-updateSession var session@(Session id _) = do+updateSession var session@(Session id' _) = do   liftIO $ modifyMVar_ var $ \(ids,sessions) -> do-    return (ids,M.insert id session sessions)+    return (ids,M.insert id' session sessions)