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 +19/−13
- jmacro-rpc-snap.cabal +4/−4
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