packages feed

servant-jquery 0.2 → 0.2.1

raw patch · 1 files changed

+17/−88 lines, 1 filesdep +servant-serverdep ~servantdep ~servant-jquery

Dependencies added: servant-server

Dependency ranges changed: servant, servant-jquery

Files

servant-jquery.cabal view
@@ -1,94 +1,11 @@ name:                servant-jquery-version:             0.2+version:             0.2.1 synopsis:            Automatically derive jquery-based javascript functions to query servant webservices description:   Automatically derive jquery-based javascript functions to query servant webservices.   .-  Example below that serves the generated javascript to a webpage that lets you+  Example <https://github.com/haskell-servant/servant-jquery/blob/master/examples/counter.hs here> that serves the generated javascript to a webpage that lets you   trigger webservice calls.-  .-  > {-# LANGUAGE DataKinds #-}-  > {-# LANGUAGE TypeOperators #-}-  > {-# LANGUAGE DeriveGeneric #-}-  > {-# LANGUAGE GeneralizedNewtypeDeriving #-}-  >-  > import Control.Concurrent.STM-  > import Control.Monad.IO.Class-  > import Data.Aeson-  > import Data.Proxy-  > import GHC.Generics-  > import Network.Wai.Handler.Warp (run)-  > import Servant-  > import Servant.JQuery-  > import System.FilePath-  >-  > -- * A simple Counter data type-  > newtype Counter = Counter { value :: Int }-  >   deriving (Generic, Show, Num)-  >-  > instance ToJSON Counter-  >-  > -- * Shared counter operations-  >-  > -- Creating a counter that starts from 0-  > newCounter :: IO (TVar Counter)-  > newCounter = newTVarIO 0-  >-  > -- Increasing the counter by 1-  > counterPlusOne :: MonadIO m => TVar Counter -> m Counter-  > counterPlusOne counter = liftIO . atomically $ do-  >   oldValue <- readTVar counter-  >   let newValue = oldValue + 1-  >   writeTVar counter newValue-  >   return newValue-  >-  > currentValue :: MonadIO m => TVar Counter -> m Counter-  > currentValue counter = liftIO $ readTVarIO counter-  >-  > -- * Our API type-  > type TestApi = "counter" :> Post Counter -- endpoint for increasing the counter-  >           :<|> "counter" :> Get  Counter -- endpoint to get the current value-  >           :<|> Raw                       -- used for serving static files -  >-  > testApi :: Proxy TestApi-  > testApi = Proxy-  >-  > -- * Server-side handler-  >-  > -- where our static files reside-  > www :: FilePath-  > www = "examples/www"-  >-  > -- defining handlers-  > server :: TVar Counter -> Server TestApi-  > server counter = counterPlusOne counter     -- (+1) on the TVar-  >             :<|> currentValue counter       -- read the TVar-  >             :<|> serveDirectory www         -- serve static files-  >-  > runServer :: TVar Counter -- ^ shared variable for the counter-  >           -> Int          -- ^ port the server should listen on-  >           -> IO ()-  > runServer var port = run port (serve testApi $ server var)-  >-  > -- * Generating the JQuery code-  >-  > incCounterJS :<|> currentValueJS :<|> _ = jquery testApi-  >-  > writeJS :: FilePath -> [AjaxReq] -> IO ()-  > writeJS fp functions = writeFile fp $-  >   concatMap generateJS functions-  >-  > main :: IO ()-  > main = do-  >   -- write the JS code to www/api.js at startup-  >   writeJS (www </> "api.js")-  >           [ incCounterJS, currentValueJS ]-  >-  >   -- setup a shared counter-  >   cnt <- newCounter-  >-  >   -- listen to requests on port 8080-  >   runServer cnt 8080 license:             BSD3 license-file:        LICENSE author:              Alp Mestanogullari@@ -103,10 +20,15 @@   type: git   location: http://github.com/haskell-servant/servant-jquery.git +flag example+  description: Build the example too+  manual: True+  default: False+ library   exposed-modules:     Servant.JQuery   other-modules:       Servant.JQuery.Internal-  build-depends:       base >=4.5 && <5, servant >= 0.2, lens >= 4+  build-depends:       base >=4.5 && <5, servant >= 0.2.1, lens >= 4   hs-source-dirs:      src   default-language:    Haskell2010   ghc-options:         -Wall@@ -115,12 +37,19 @@   main-is: counter.hs   ghc-options: -O2 -Wall   hs-source-dirs: examples+  +  if flag(example)+    buildable: True+  else+    buildable: False+   build-depends:       aeson     , base     , filepath-    , servant >= 0.2-    , servant-jquery >= 0.2+    , servant >= 0.2.1+    , servant-server >= 0.2.1+    , servant-jquery >= 0.2.1     , stm     , transformers     , warp