packages feed

jmacro-rpc-snap 0.1 → 0.2

raw patch · 2 files changed

+23/−17 lines, 2 filesdep ~jmacrodep ~jmacro-rpcPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: jmacro, jmacro-rpc

API changes (from Hackage documentation)

+ Network.JMacroRPC.Snap: panelToPage :: String -> Panel Snap -> Snap ()

Files

Network/JMacroRPC/Snap.hs view
@@ -22,17 +22,17 @@ > import Network.JMacroRPC.Base > import Text.XHtml hiding(dir) > import qualified Data.Text as T-> +> > jsScript f = script (primHtml f) ! [thetype "text/javascript"] > jsScript' = jsScript . show . renderJs-> +> > testPage = mkConversationPageNoCulling pageFun (newMVar (1::Int)) jRpcs >     where pageFun :: JStat ->  Snap ()->           pageFun js = writeText $ T.pack $ show $ +>           pageFun js = writeText $ T.pack $ show $ >                        (header << [script ! [src "https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"] << noHtml]) +++ >                        jsScript' js +++->                        jsScript' ([jmacro|$(\ ->                                      {  +>                        jsScript' ([jmacro|$(\+>                                      { >                                            var b = $("<button>click me!</button>"); >                                            $("body").append(b); >                                            b.click(\ {@@ -42,12 +42,12 @@ >                                      }); >                                   |]); >           jRpcs = [getCounterRPC]->           getCounterRPC = +>           getCounterRPC = >               toJsonConvRPC "getCounter" $ \s -> (liftIO $ retRight =<< modifyMVar s (\i -> return (i+1,i)) :: Snap (Either String Int))-> +> > retRight :: a -> IO (Either String a) > retRight = return . Right-> +> > main = quickHttpServe =<< testPage  Every invocation of this page (including from the same browser) will have a distinct, stateful, counter, stored server-side.@@ -56,10 +56,11 @@   module Network.JMacroRPC.Snap where-    + import Prelude hiding (tail, init, head, last, minimum, maximum, foldr1, foldl1, (!!), read) import Control.Applicative import Network.JMacroRPC.Base+import Network.JMacroRPC.Panels import Data.Aeson import Language.Javascript.JMacro import qualified Data.ByteString.Char8 as B@@ -67,7 +68,7 @@ import Snap.Core  instance (ToJSON b) => ToJsonRPC (Snap (Either String b)) Snap where-    toJsonRPC_ f = \ _ -> fmap (fmap toJSON) $ f +    toJsonRPC_ f = \ _ -> fmap (fmap toJSON) $ f  -- | Provide a set of json rpcs. serveRpcs :: MonadSnap m => (Int -> m s) -> [JsonRPC m s] -> m ()@@ -77,10 +78,10 @@   writeLBS =<< handleRpcs stateFun rpcs rq  -- | This general handler allows explicit culling of conversation state.-mkConversationPage :: (MonadSnap m) => -                            IO timestamp -- ^ Get an abstract timestamp +mkConversationPage :: (MonadSnap m) =>+                            IO timestamp -- ^ Get an abstract timestamp                             -> (IntMap (timestamp,s) -> IO (IntMap (timestamp,s))) -- ^ Cull a map of conversations based on a timestamp-                            -> (JStat -> m ()) -- ^ Take some JMacro Javascript and splice it into some generated page. +                            -> (JStat -> m ()) -- ^ Take some JMacro Javascript and splice it into some generated page.                             -> IO s -- ^ Generate an empty "initial" state for a conversation. States are responsible for using their own MVars or the like to allow sharing.                             -> [JsonRPC m s] -- ^ JSON RPCs to serve and make available to clientside javascript                             -> IO (m ())@@ -89,3 +90,8 @@ -- | This simple handler allows conversation state to grow without bounds. mkConversationPageNoCulling :: (MonadSnap m) => (JStat -> m ()) -> IO s -> [JsonRPC m s] -> IO (m ()) mkConversationPageNoCulling pageFun emptyState rpcs = mkConversationPage (return ()) return pageFun emptyState rpcs++-- | Convert a Panel into a Snap resource.+panelToPage :: String -> Panel Snap -> Snap ()+panelToPage title p = dir (B.pack "jrpcs") updateHandler <|> method GET drawHandler+    where (updateHandler, drawHandler) = panelToPageGen (serveRpcs $ const (return ())) writeLazyText title p
jmacro-rpc-snap.cabal view
@@ -1,20 +1,20 @@ Name:                jmacro-rpc-snap-Version:             0.1+Version:             0.2 Homepage:            http://patch-tag.com/r/gershomb/jmacro-rpc License:             BSD3 License-file:        LICENSE Author:              Gershom Bazerman Maintainer:          gershomb@gmail.com-Category:            Network+Category:            Network, Web Build-type:          Simple Cabal-version:       >=1.6 Synopsis:            Snap backend for jmacro-rpc-Description:         Provides functions for serving jmacro-rpc json rpcs from Snap.+Description:         Provides functions for serving jmacro-rpc json rpcs and panels from Snap.  Library   Exposed-modules: Network.JMacroRPC.Snap   -  Build-depends: base >= 4, base < 7, bytestring > 0.9, jmacro > 0.5, jmacro-rpc >= 0.1, mtl >= 2, containers >= 0.4, snap-core >= 0.8, aeson >= 0.5+  Build-depends: base >= 4, base < 7, bytestring > 0.9, jmacro > 0.6, jmacro-rpc >= 0.2, mtl >= 2, containers >= 0.4, snap-core >= 0.8, aeson >= 0.5    ghc-options: -Wall