git.iko.soy/typeable/pagerduty
on develop help sign in
18 files changed+126−134
since splitsnapshots
unifiedsplit
.travis.yml+30−4 Makefile−22 pagerduty.cabal+5−5 script/generate-pages−25 script/travis-lifecycle-before_install+11 script/travis-lifecycle-install+13 script/travis-lifecycle-script+9 script/travis-timeout+15 script/upload-documentation−37 src/Control/Monad/Trans/PagerDuty.hs+2−1 src/Network/PagerDuty/Integration.hs+3−3 src/Network/PagerDuty/Internal/Query.hs+5−4 src/Network/PagerDuty/Internal/Types.hs+19−12 src/Network/PagerDuty/REST.hs+6−8 src/Network/PagerDuty/REST/EscalationPolicies/EscalationRules.hs+1−1 src/Network/PagerDuty/REST/LogEntries.hs+1−2 src/Network/PagerDuty/REST/Users.hs−3 stack.yaml+6−7
.travis.yml+30−4
@@ -1,4 +1,30 @@
1−language: haskell
2−ghc: 7.8.4
3−install: []
4−script: [make all]
1+sudo: false
2+
3+cache:
4+ apt: true
5+ directories:
6+ - ~/.stack
7+
8+branches:
9+ only:
10+ - master
11+ - develop
12+
13+before_install:
14+ - export PATH=/opt/ghc/$GHCVER/bin:$PATH
15+ - export PATH=~/.local/bin:$PATH
16+ - ./script/travis-lifecycle-before_install
17+
18+install:
19+ - ./script/travis-lifecycle-install
20+
21+script:
22+ - ./script/travis-lifecycle-script
23+
24+matrix:
25+ fast_finish: true
26+ include:
27+ - env: GHCVER=8.0.1
28+ addons: { apt: { packages: [ghc-8.0.1], sources: [hvr-ghc] } }
29+ - env: GHCVER=7.10.3
30+ addons: { apt: { packages: [ghc-7.10.3], sources: [hvr-ghc] } }
Makefiledeleted−22
@@ -1,22 +0,0 @@
1−FLAGS := -j --disable-documentation
2−
3−build:
4− cabal build $(addprefix -,$(findstring j,$(MAKEFLAGS)))
5−
6−all:
7− make clean; make install && make build
8−
9−install: cabal.sandbox.config
10− cabal install $(FLAGS) \
11− --only-dependencies \
12− --force-reinstalls
13−
14−clean:
15− cabal clean
16− rm -rf cabal.sandbox.config .cabal-sandbox
17−
18−doc:
19− cabal haddock
20−
21−cabal.sandbox.config:
22− cabal sandbox init
pagerduty.cabal+5−5
@@ -1,5 +1,5 @@
11name: pagerduty
2−version: 0.0.3.2
2+version: 0.0.8
33synopsis: Client library for PagerDuty Integration and REST APIs.
44homepage: http://github.com/brendanhay/pagerduty
55license: OtherLicense
@@ -71,16 +71,16 @@ library
7171 , Network.PagerDuty.Types
7272
7373 build-depends:
74− aeson >= 0.8
75− , base >= 4.7 && < 5
74+ aeson >= 2.0
75+ , base >= 4.7 && < 5
7676 , bifunctors >= 4.1
7777 , bytestring >= 0.9
7878 , bytestring-conversion >= 0.2.1
7979 , conduit > 1.1
8080 , data-default-class >= 0.0.1
8181 , exceptions >= 0.6
82− , generics-sop >= 0.1.0.2
83− , http-client >= 0.4.3
82+ , generics-sop >= 0.5.0.0
83+ , http-client >= 0.5 && < 1
8484 , http-types >= 0.8
8585 , lens >= 4.4
8686 , lens-aeson >= 1
script/generate-pagesdeleted−25
@@ -1,25 +0,0 @@
1−#!/usr/bin/env bash
2−
3−set -e
4−set -x
5−set -o errexit
6−
7−branch=$(git symbolic-ref -q HEAD)
8−branch=${branch##refs/heads/}
9−branch=${branch:-HEAD}
10−
11−cabal configure --disable-tests
12−
13−DOCDIR=`mktemp -d -t pages.XXXXXX`
14−cabal haddock --haddock-option=-o$DOCDIR
15−
16−HEAD=`git rev-parse HEAD`
17−
18−git checkout gh-pages
19−
20−mv $DOCDIR/* .
21−
22−git add *.html *.js *.css *.gif *.png
23−git commit -m "Generated documentation from $HEAD on $branch"
24−git push origin gh-pages
25−git checkout $branch
script/travis-lifecycle-before_installnew file+11
@@ -0,0 +1,11 @@
1+#!/usr/bin/env bash
2+
3+set -e
4+
5+mkdir -p ~/.local/bin
6+
7+curl -L https://www.stackage.org/stack/linux-x86_64 | \
8+ tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
9+
10+ghc --version
11+stack --version
script/travis-lifecycle-installnew file+13
@@ -0,0 +1,13 @@
1+#!/usr/bin/env bash
2+
3+set -e
4+
5+GHCVER=${GHCVER?"GHCVER needs to be set."}
6+
7+path=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
8+
9+$path/travis-timeout \
10+ stack --no-terminal --skip-ghc-check --stack-yaml stack-$GHCVER.yaml setup
11+
12+$path/travis-timeout \
13+ stack --no-terminal --skip-ghc-check --stack-yaml stack-$GHCVER.yaml test pagerduty --only-snapshot
script/travis-lifecycle-scriptnew file+9
@@ -0,0 +1,9 @@
1+#!/usr/bin/env bash
2+
3+set -e
4+
5+GHCVER=${GHCVER?"GHCVER needs to be set."}
6+
7+path=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
8+
9+stack --no-terminal --skip-ghc-check --stack-yaml stack-$GHCVER.yaml test pagerduty
script/travis-timeoutnew file+15
@@ -0,0 +1,15 @@
1+#!/usr/bin/env bash
2+
3+$* &
4+pidA=$!
5+minutes=0
6+
7+while true; do sleep 60; ((minutes++)); echo -e "\033[0;32m$minutes minute(s) elapsed running '$*'\033[0m."; done &
8+pidB=$!
9+wait $pidA
10+resA=$?
11+
12+echo -e "\033[0;32m'$*' exited with status ${resA}.\033[0m"
13+kill -9 $pidB
14+
15+exit $resA
script/upload-documentationdeleted−37
@@ -1,37 +0,0 @@
1−#!/usr/bin/env bash
2−
3−set -e
4−
5−package=${PWD##*/}
6−
7−echo "Package: ${package}"
8−read -p "Version: " version
9−read -p "Hackage user: " user
10−read -sp "Hackage password (not echoed): " password
11−
12−echo
13−echo "BUILDING"
14−echo
15−
16−cabal configure
17−cabal build
18−cabal haddock \
19− --hyperlink-source \
20− --html-location='/package/$pkg-$version/docs' \
21− --contents-location='/package/$pkg'
22−
23−echo
24−echo "ARCHIVING"
25−echo
26−
27−cd dist/doc/html
28−DDIR="${package}-${version}-docs"
29−cp -r "${package}" "${DDIR}" && gtar -c -v -z -Hustar -f "${DDIR}.tar.gz" "${DDIR}"
30−
31−echo
32−echo "UPLOADING"
33−echo
34−
35−curl -X PUT -H 'Content-Type: application/x-tar' \
36− -H 'Content-Encoding: gzip' --data-binary "@${DDIR}.tar.gz" \
37− "http://${user}:${password}@hackage.haskell.org/package/${package}-${version}/docs"
src/Control/Monad/Trans/PagerDuty.hs+2−1
@@ -42,9 +42,10 @@ module Control.Monad.Trans.PagerDuty
4242 ) where
4343
4444import Control.Applicative
45+import Control.Monad
4546import Control.Monad.Base
4647import Control.Monad.Catch
47−import Control.Monad.Error (MonadError (..))
48+import Control.Monad.Except (MonadError (..))
4849import Control.Monad.Morph
4950import Control.Monad.Reader
5051import Control.Monad.Trans.Control
src/Network/PagerDuty/Integration.hs+3−3
@@ -81,8 +81,7 @@ module Network.PagerDuty.Integration
8181import Control.Lens
8282import Control.Monad.IO.Class
8383import Data.Aeson
84−import Data.Default.Class
85−import qualified Data.HashMap.Strict as Map
84+import qualified Data.Aeson.KeyMap as Map
8685import Data.Text (Text)
8786import Network.HTTP.Client (Manager)
8887import qualified Network.HTTP.Client as Client
@@ -292,7 +291,8 @@ submitWith :: MonadIO m
292291 -> Event
293292 -> m (Either Error Response)
294293submitWith m l e = request m l e $
295− def { Client.host = "events.pagerduty.com"
294+ Client.defaultRequest
295+ { Client.host = "events.pagerduty.com"
296296 , Client.path = "/generic/2010-04-15/create_event.json"
297297 , Client.method = "POST"
298298 }
src/Network/PagerDuty/Internal/Query.hs+5−4
@@ -59,14 +59,15 @@ gqueryWith :: forall a. (Generic a, HasDatatypeInfo a, All2 QueryValues (Code a)
5959 -> a
6060 -> Query
6161gqueryWith o a = case datatypeInfo (Proxy :: Proxy a) of
62− ADT _ _ cs -> go cs (from a)
63− Newtype _ _ c -> go (c :* Nil) (from a)
62+ ADT _ _ cs _ -> go cs (from a)
63+ Newtype _ _ c -> go (c :* Nil) (from a)
6464 where
65− go :: (All2 QueryValues xss, SingI xss)
65+ go :: (All2 QueryValues xss, SListI xss)
6666 => NP ConstructorInfo xss
6767 -> SOP I xss
6868 -> Query
69− go cs (SOP sop) = group . unI . hcollapse $ hcliftA2' p (gctor o) cs sop
69+ go cs (SOP sop) =
70+ group . hcollapse $ hcliftA2' p (gctor o) cs sop
7071
7172 group :: [(ByteString, ByteString)] -> Query
7273 group = concatMap f . groupBy ((==) `on` fst)
src/Network/PagerDuty/Internal/Types.hs+19−12
@@ -29,31 +29,31 @@ module Network.PagerDuty.Internal.Types where
2929import Control.Applicative
3030import Control.Lens hiding ((.=), Empty)
3131import Control.Monad.IO.Class
32−import Data.Aeson hiding (Error)
32+import Data.Aeson hiding (Error, Key)
33+import qualified Data.Aeson.KeyMap as Map
3334import Data.Aeson.Types (Parser)
3435import Data.ByteString (ByteString)
3536import qualified Data.ByteString.Char8 as BS
3637import Data.ByteString.Conversion hiding (List)
3738import Data.Default.Class
3839import Data.Function (on)
39−import qualified Data.HashMap.Strict as Map
4040import Data.List (deleteBy, intersperse)
4141import Data.Monoid
4242import Data.String
4343import Data.Text (Text)
4444import qualified Data.Text as Text
4545import qualified Data.Text.Encoding as Text
46−import Data.Time
46+import Data.Time (UTCTime, TimeZone, formatTime, utc, timeZoneName)
4747import GHC.TypeLits
4848import Network.HTTP.Client (Manager)
4949import Network.HTTP.Types
5050import Network.HTTP.Types.QueryLike
5151import Network.PagerDuty.Internal.Query
5252import Network.PagerDuty.Internal.TH
53−import Data.Time.Locale.Compat ()
53+import Data.Time.Locale.Compat
5454
5555newtype CSV a = CSV [a]
56− deriving (Eq, Show, Monoid)
56+ deriving (Eq, Show, Semigroup, Monoid)
5757
5858makePrisms ''CSV
5959
@@ -70,7 +70,7 @@ instance ToByteString a => ToJSON (CSV a) where
7070 toJSON = String . Text.decodeUtf8 . toByteString'
7171
7272newtype List a = L [a]
73− deriving (Eq, Show, Monoid)
73+ deriving (Eq, Show, Semigroup, Monoid)
7474
7575deriveJSON ''List
7676makePrisms ''List
@@ -279,8 +279,13 @@ data Pager = Pager
279279
280280makeLenses ''Pager
281281
282−instance FromJSON a => FromJSON (a, Maybe Pager) where
283− parseJSON = withObject "paginated" $ \o -> (,)
282+data Page a = Page
283+ { _pgItem :: a
284+ , _pgPager :: Maybe Pager
285+ }
286+
287+instance FromJSON a => FromJSON (Page a) where
288+ parseJSON = withObject "paginated" $ \o -> Page
284289 <$> parseJSON (Object o)
285290 <*> optional (parse o)
286291 where
@@ -305,11 +310,13 @@ data Path where
305310 Path :: Path
306311 Seg :: ToByteString a => a -> Path
307312
313+instance Semigroup Path where
314+ x <> Path = x
315+ Path <> y = y
316+ Seg x <> Seg y = Seg (builder x <> "/" <> builder y)
317+
308318instance Monoid Path where
309− mempty = Path
310− mappend x Path = x
311− mappend Path y = y
312− mappend (Seg x) (Seg y) = Seg (builder x <> "/" <> builder y)
319+ mempty = Path
313320
314321instance IsString Path where
315322 fromString = Seg
src/Network/PagerDuty/REST.hs+6−8
@@ -13,7 +13,6 @@
1313
1414module Network.PagerDuty.REST
1515 (
16−
1716 -- * Sending requests
1817 send
1918 , sendWith
@@ -30,7 +29,6 @@ import Control.Monad.IO.Class
3029import Control.Monad.Trans
3130import Data.Aeson (FromJSON)
3231import Data.Conduit
33−import Data.Default.Class
3432import Data.Monoid
3533import Network.HTTP.Client (Manager)
3634import qualified Network.HTTP.Client as Client
@@ -56,7 +54,7 @@ sendWith :: (MonadIO m, FromJSON b)
5654 => Env s
5755 -> Request a s b
5856 -> m (Either Error b)
59−sendWith e = liftM (fmap fst) . http e
57+sendWith e = liftM (fmap _pgItem) . http e
6058
6159-- | /See:/ 'paginateWith'
6260paginate :: (MonadIO m, Paginate a, FromJSON b)
@@ -75,15 +73,15 @@ paginateWith e = go
7573 where
7674 go rq = do
7775 rs <- lift (http e rq)
78− yield (fst <$> rs)
76+ yield (_pgItem <$> rs)
7977 either (const (return ()))
80− (maybe (return ()) go . next rq . snd)
78+ (maybe (return ()) go . next rq . _pgPager)
8179 rs
8280
8381http :: (MonadIO m, FromJSON b)
8482 => Env s
8583 -> Request a s b
86− -> m (Either Error (b, Maybe Pager))
84+ -> m (Either Error (Page b))
8785http e rq = request (e ^. envManager) (e ^. envLogger) rq $ raw
8886 { Client.host = domain (e ^. envDomain)
8987 , Client.path = renderPath (rq ^. path)
@@ -91,7 +89,7 @@ http e rq = request (e ^. envManager) (e ^. envLogger) rq $ raw
9189 }
9290 where
9391 raw = case e ^. envAuth of
94− AuthBasic u p -> Client.applyBasicAuth u p def
95− AuthToken t -> def
92+ AuthBasic u p -> Client.applyBasicAuth u p Client.defaultRequest
93+ AuthToken t -> Client.defaultRequest
9694 { Client.requestHeaders = [("Authorization", "Token token=" <> t)]
9795 }
src/Network/PagerDuty/REST/EscalationPolicies/EscalationRules.hs+1−1
@@ -67,7 +67,7 @@ module Network.PagerDuty.REST.EscalationPolicies.EscalationRules
6767import Control.Applicative ((<$>))
6868import Control.Lens hiding ((.=))
6969import Data.Aeson
70−import qualified Data.HashMap.Strict as Map
70+import qualified Data.Aeson.KeyMap as Map
7171import Data.Text (Text)
7272import Network.HTTP.Types
7373import Network.PagerDuty.Internal.TH
src/Network/PagerDuty/REST/LogEntries.hs+1−2
@@ -111,12 +111,11 @@ module Network.PagerDuty.REST.LogEntries
111111 , nAddress
112112 ) where
113113
114−import Control.Applicative
115114import Control.Lens hiding (Empty)
116115import Data.Aeson
117116import Data.Aeson.Lens
117+import qualified Data.Aeson.KeyMap as Map
118118import Data.Default.Class
119−import qualified Data.HashMap.Strict as Map
120119import Data.Text (Text)
121120import qualified Data.Text as Text
122121import Data.Time
src/Network/PagerDuty/REST/Users.hs−3
@@ -5,7 +5,6 @@
55{-# LANGUAGE TypeFamilies #-}
66
77{-# OPTIONS_GHC -fno-warn-type-defaults #-}
8−{-# OPTIONS_GHC -ddump-splices #-}
98
109-- Module : Network.PagerDuty.REST.Users
1110-- Copyright : (c) 2013-2015 Brendan Hay <brendan.g.hay@gmail.com>
@@ -85,8 +84,6 @@ module Network.PagerDuty.REST.Users
8584import Control.Applicative hiding (empty)
8685import Control.Lens hiding (Empty, (.=))
8786import Data.Aeson
88−import Data.ByteString (ByteString)
89−import Data.ByteString.Builder (Builder)
9087import Data.Default.Class
9188import Data.Monoid
9289import Data.Text (Text)
stack.yaml+6−7
@@ -1,8 +1,7 @@
1−resolver: nightly-2015-10-24
2−flags: {}
3−extra-deps:
4− - aeson-0.10.0.0
5− - lens-4.13
6− - reflection-2.1
1+resolver: lts-19.23
2+
73packages:
8− - '.'
4+- .
5+
6+nix:
7+ packages: [zlib]