adapt to the servant/servant-server split, prepare new release
This commit is contained in:
parent
c660b9cb0b
commit
d106989d62
2 changed files with 69 additions and 88 deletions
52
docs.sh
Normal file
52
docs.sh
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
SERVANT_DIR=/tmp/servant-jquery-gh-pages
|
||||||
|
|
||||||
|
# Make a temporary clone
|
||||||
|
|
||||||
|
rm -rf $SERVANT_DIR
|
||||||
|
|
||||||
|
git clone . $SERVANT_DIR
|
||||||
|
|
||||||
|
cd $SERVANT_DIR
|
||||||
|
|
||||||
|
# Make sure to pull the latest
|
||||||
|
|
||||||
|
git remote add haskell-servant git@github.com:haskell-servant/servant-jquery.git
|
||||||
|
|
||||||
|
git fetch haskell-servant
|
||||||
|
|
||||||
|
git reset --hard haskell-servant/gh-pages
|
||||||
|
|
||||||
|
# Clear everything away
|
||||||
|
|
||||||
|
git rm -rf $SERVANT_DIR/*
|
||||||
|
|
||||||
|
# Switch back and build the haddocks
|
||||||
|
|
||||||
|
cd -
|
||||||
|
|
||||||
|
cabal configure --builddir=$SERVANT_DIR
|
||||||
|
|
||||||
|
cabal haddock --hoogle --hyperlink-source --html-location='https://hackage.haskell.org/package/$pkg-$version/docs' --builddir=$SERVANT_DIR
|
||||||
|
|
||||||
|
commit_hash=$(git rev-parse HEAD)
|
||||||
|
|
||||||
|
# Move the HTML docs to the root
|
||||||
|
|
||||||
|
cd $SERVANT_DIR
|
||||||
|
|
||||||
|
rm *
|
||||||
|
rm -rf build
|
||||||
|
mv doc/html/servant-jquery/* .
|
||||||
|
rm -r doc/
|
||||||
|
|
||||||
|
# Add everything
|
||||||
|
|
||||||
|
git add .
|
||||||
|
|
||||||
|
git commit -m "Built from $commit_hash"
|
||||||
|
|
||||||
|
# Push to update the pages
|
||||||
|
|
||||||
|
git push haskell-servant HEAD:gh-pages
|
||||||
|
|
||||||
|
rm -rf $SERVANT_DIR
|
|
@ -1,94 +1,11 @@
|
||||||
name: servant-jquery
|
name: servant-jquery
|
||||||
version: 0.2
|
version: 0.2.1
|
||||||
synopsis: Automatically derive jquery-based javascript functions to query servant webservices
|
synopsis: Automatically derive jquery-based javascript functions to query servant webservices
|
||||||
description:
|
description:
|
||||||
Automatically derive jquery-based javascript functions to query servant webservices.
|
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.
|
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: BSD3
|
||||||
license-file: LICENSE
|
license-file: LICENSE
|
||||||
author: Alp Mestanogullari
|
author: Alp Mestanogullari
|
||||||
|
@ -103,10 +20,15 @@ source-repository head
|
||||||
type: git
|
type: git
|
||||||
location: http://github.com/haskell-servant/servant-jquery.git
|
location: http://github.com/haskell-servant/servant-jquery.git
|
||||||
|
|
||||||
|
flag example
|
||||||
|
description: Build the example too
|
||||||
|
manual: True
|
||||||
|
default: False
|
||||||
|
|
||||||
library
|
library
|
||||||
exposed-modules: Servant.JQuery
|
exposed-modules: Servant.JQuery
|
||||||
other-modules: Servant.JQuery.Internal
|
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
|
hs-source-dirs: src
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
ghc-options: -Wall
|
ghc-options: -Wall
|
||||||
|
@ -115,12 +37,19 @@ executable counter
|
||||||
main-is: counter.hs
|
main-is: counter.hs
|
||||||
ghc-options: -O2 -Wall
|
ghc-options: -O2 -Wall
|
||||||
hs-source-dirs: examples
|
hs-source-dirs: examples
|
||||||
|
|
||||||
|
if flag(example)
|
||||||
|
buildable: True
|
||||||
|
else
|
||||||
|
buildable: False
|
||||||
|
|
||||||
build-depends:
|
build-depends:
|
||||||
aeson
|
aeson
|
||||||
, base
|
, base
|
||||||
, filepath
|
, filepath
|
||||||
, servant >= 0.2
|
, servant >= 0.2.1
|
||||||
, servant-jquery >= 0.2
|
, servant-server >= 0.2.1
|
||||||
|
, servant-jquery >= 0.2.1
|
||||||
, stm
|
, stm
|
||||||
, transformers
|
, transformers
|
||||||
, warp
|
, warp
|
||||||
|
|
Loading…
Reference in a new issue