pusher-http-haskell 0.1.0.0 → 0.2.0.0
raw patch · 7 files changed
+39/−31 lines, 7 filesdep ~QuickCheckdep ~basedep ~mtlPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: QuickCheck, base, mtl, time, transformers
API changes (from Hackage documentation)
- Control.Monad.Pusher.HTTP: instance (Error e, MonadHTTP m) => MonadHTTP (ErrorT e m)
- Control.Monad.Pusher.Time: instance (Error e, MonadTime m) => MonadTime (ErrorT e m)
+ Control.Monad.Pusher.HTTP: instance MonadHTTP m => MonadHTTP (ExceptT e m)
+ Control.Monad.Pusher.Time: instance MonadTime m => MonadTime (ExceptT e m)
- Control.Monad.Pusher: runPusherT :: PusherT m a -> Pusher -> m (Either String a)
+ Control.Monad.Pusher: runPusherT :: PusherT m a -> Pusher -> m (Either Text a)
- Control.Monad.Pusher: type MonadPusher m = (Functor m, MonadError String m, MonadHTTP m, MonadReader Pusher m, MonadTime m)
+ Control.Monad.Pusher: type MonadPusher m = (Functor m, MonadError Text m, MonadHTTP m, MonadReader Pusher m, MonadTime m)
- Control.Monad.Pusher: type PusherT m a = ReaderT Pusher (ErrorT String m) a
+ Control.Monad.Pusher: type PusherT m a = ReaderT Pusher (ExceptT Text m) a
- Network.Pusher.Internal.HTTP: get :: (FromJSON a, Functor m, MonadError String m, MonadHTTP m) => Manager -> ByteString -> [(ByteString, ByteString)] -> m a
+ Network.Pusher.Internal.HTTP: get :: (FromJSON a, Functor m, MonadError Text m, MonadHTTP m) => Manager -> ByteString -> [(ByteString, ByteString)] -> m a
- Network.Pusher.Internal.HTTP: post :: (ToJSON a, Functor m, MonadError String m, MonadHTTP m) => Manager -> ByteString -> [(ByteString, ByteString)] -> a -> m ()
+ Network.Pusher.Internal.HTTP: post :: (ToJSON a, Functor m, MonadError Text m, MonadHTTP m) => Manager -> ByteString -> [(ByteString, ByteString)] -> a -> m ()
Files
- pusher-http-haskell.cabal +11/−7
- src/Control/Monad/Pusher.hs +6/−5
- src/Control/Monad/Pusher/HTTP.hs +2/−2
- src/Control/Monad/Pusher/Time.hs +2/−2
- src/Network/Pusher.hs +1/−1
- src/Network/Pusher/Internal/HTTP.hs +11/−9
- test/HTTP.hs +6/−5
pusher-http-haskell.cabal view
@@ -1,5 +1,5 @@ name: pusher-http-haskell-version: 0.1.0.0+version: 0.2.0.0 cabal-version: >=1.18 build-type: Simple license: MIT@@ -11,8 +11,12 @@ homepage: https://github.com/pusher-community/pusher-http-haskell bug-reports: https://github.com/pusher-community/pusher-http-haskell/issues synopsis: Haskell client library for the Pusher HTTP API+description: Functions that correspond to endpoints of the Pusher HTTP+ API. Messages can be triggered, and information about the+ channel can be queried. Additionally there are functions+ for authenticating users of private and presence channels. category: Network-tested-with: GHC == 7.8.4+tested-with: GHC==7.10.2 library exposed-modules: Control.Monad.Pusher,@@ -28,18 +32,18 @@ hs-source-dirs: src default-extensions: OverloadedStrings build-depends: aeson ==0.8.*,- base ==4.7.*,+ base >=4.7 && <4.9, bytestring ==0.10.*, base16-bytestring ==0.1.*, cryptohash ==0.11.*, hashable ==1.2.*, http-client ==0.4.*, http-types ==0.8.*,- mtl ==2.1.*,- QuickCheck ==2.7.*,+ mtl ==2.2.*,+ QuickCheck >=2.7 && <2.9, text ==1.2.*,- time ==1.4.*,- transformers ==0.3.*,+ time >=1.4 && <1.6,+ transformers >=0.3 && <0.5, unordered-containers ==0.2.* executable api-example
src/Control/Monad/Pusher.hs view
@@ -17,9 +17,10 @@ -} module Control.Monad.Pusher (MonadPusher, PusherM, PusherT, runPusherT) where -import Control.Monad.Error (ErrorT, MonadError, runErrorT)+import Control.Monad.Except (ExceptT, MonadError, runExceptT) import Control.Monad.Identity (Identity) import Control.Monad.Reader (MonadReader, ReaderT, runReaderT)+import qualified Data.Text as T import Control.Monad.Pusher.HTTP (MonadHTTP) import Control.Monad.Pusher.Time (MonadTime)@@ -29,17 +30,17 @@ type PusherM a = PusherT Identity a -- |Use this if you wish to stack this on your own monads.-type PusherT m a = ReaderT Pusher (ErrorT String m) a+type PusherT m a = ReaderT Pusher (ExceptT T.Text m) a -- |Run the monadic Pusher code to extract the result-runPusherT :: PusherT m a -> Pusher -> m (Either String a)-runPusherT run p = runErrorT $ runReaderT run p+runPusherT :: PusherT m a -> Pusher -> m (Either T.Text a)+runPusherT run p = runExceptT $ runReaderT run p -- |Typeclass alias for the return type of the API functions (keeps the -- signatures less verbose) type MonadPusher m = ( Functor m- , MonadError String m+ , MonadError T.Text m , MonadHTTP m , MonadReader Pusher m , MonadTime m
src/Control/Monad/Pusher/HTTP.hs view
@@ -11,7 +11,7 @@ -} module Control.Monad.Pusher.HTTP (MonadHTTP(..)) where -import Control.Monad.Error (Error, ErrorT)+import Control.Monad.Except (ExceptT) import Control.Monad.Reader (ReaderT) import Control.Monad.Trans.Class (lift) import Network.HTTP.Client (Manager, Request, Response)@@ -29,5 +29,5 @@ instance MonadHTTP m => MonadHTTP (ReaderT r m) where httpLbs req mngr = lift $ httpLbs req mngr -instance (Error e, MonadHTTP m) => MonadHTTP (ErrorT e m) where+instance MonadHTTP m => MonadHTTP (ExceptT e m) where httpLbs req mngr = lift $ httpLbs req mngr
src/Control/Monad/Pusher/Time.hs view
@@ -9,7 +9,7 @@ module Control.Monad.Pusher.Time (MonadTime(..)) where import Control.Applicative ((<$>))-import Control.Monad.Error (Error, ErrorT)+import Control.Monad.Except (ExceptT) import Control.Monad.Reader (ReaderT) import Control.Monad.Trans.Class (lift) import Network.HTTP.Client (Manager, Request, Response)@@ -26,5 +26,5 @@ instance MonadTime m => MonadTime (ReaderT r m) where getPOSIXTime = lift getPOSIXTime -instance (Error e, MonadTime m) => MonadTime (ErrorT e m) where+instance MonadTime m => MonadTime (ExceptT e m) where getPOSIXTime = lift getPOSIXTime
src/Network/Pusher.hs view
@@ -58,7 +58,7 @@ import Control.Applicative ((<$>)) import Control.Monad (when)-import Control.Monad.Error (throwError)+import Control.Monad.Except (throwError) import Control.Monad.Reader (MonadReader, asks) import Data.Maybe (maybeToList) import Data.Monoid ((<>))
src/Network/Pusher/Internal/HTTP.hs view
@@ -16,7 +16,8 @@ module Network.Pusher.Internal.HTTP (MonadHTTP(..), get, post) where import Control.Arrow (second)-import Control.Monad.Error (MonadError, throwError)+import Control.Monad.Except (MonadError, throwError)+import Data.Text.Encoding (decodeUtf8') import Network.HTTP.Client ( Manager , RequestBody(RequestBodyLBS)@@ -36,6 +37,7 @@ import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as BC import qualified Data.ByteString.Lazy as BL+import qualified Data.Text as T import Control.Monad.Pusher.HTTP (MonadHTTP(httpLbs)) @@ -44,7 +46,7 @@ -- |Issue an HTTP GET request. On a 200 response, the response body is returned. -- On failure, an error will be thrown into the MonadError instance. get- :: (A.FromJSON a, Functor m, MonadError String m, MonadHTTP m)+ :: (A.FromJSON a, Functor m, MonadError T.Text m, MonadHTTP m) => Manager -> B.ByteString -- ^The API endpoint, for example http://api.pusherapp.com/apps/123/events@@ -56,13 +58,13 @@ resp <- makeRequest connManager ep qs Nothing when200 resp $ either- throwError+ (throwError . T.pack) return (A.eitherDecode $ responseBody resp) -- |Issue an HTTP POST request. post- :: (A.ToJSON a, Functor m, MonadError String m, MonadHTTP m)+ :: (A.ToJSON a, Functor m, MonadError T.Text m, MonadHTTP m) => Manager -> B.ByteString -> [(B.ByteString, B.ByteString)]@@ -75,14 +77,14 @@ -- |Make a request by building up an http-client Request data structure, and -- performing the IO action. makeRequest- :: (Functor m, MonadError String m, MonadHTTP m)+ :: (Functor m, MonadError T.Text m, MonadHTTP m) => Manager -> B.ByteString -> [(B.ByteString, B.ByteString)] -> Maybe BL.ByteString -> m (Response BL.ByteString) makeRequest connManager ep qs body = do- req <- either (throwError . show) return (parseUrl $ BC.unpack ep)+ req <- either (throwError . T.pack . show) return (parseUrl $ BC.unpack ep) let req' = setQueryString (map (second Just) qs) req req'' = case body of@@ -94,13 +96,13 @@ Nothing -> req' httpLbs req'' connManager -when200 :: (MonadError String m) => Response BL.ByteString -> m a -> m a+when200 :: (MonadError T.Text m) => Response BL.ByteString -> m a -> m a when200 response run = let status = responseStatus response in if statusCode status == 200 then run else- throwError $ show $ statusMessage status+ throwError $ either (T.pack . show) id $ decodeUtf8' $ statusMessage status -errorOn200 :: (MonadError String m) => Response BL.ByteString -> m ()+errorOn200 :: (MonadError T.Text m) => Response BL.ByteString -> m () errorOn200 response = when200 response (return ())
test/HTTP.hs view
@@ -7,7 +7,7 @@ module HTTP where import Control.Applicative (Applicative)-import Control.Monad.Error (MonadError, catchError, throwError)+import Control.Monad.Except (MonadError, catchError, throwError) import Control.Monad.Reader (MonadReader, ReaderT, ask, runReaderT) import Control.Monad.Trans.Class (MonadTrans, lift) import Test.Hspec (Spec, describe, it, shouldBe)@@ -24,6 +24,7 @@ import qualified Data.Aeson as A import qualified Data.ByteString.Lazy as BL import qualified Data.HashMap.Strict as HM+import qualified Data.Text as T import Network.Pusher.Internal.HTTP ( MonadHTTP(httpLbs)@@ -97,8 +98,8 @@ (runMockServer (get mngr "http://example.com/path" []) failedResponse- :: Either String ())- `shouldBe` Left "\"fail\""+ :: Either T.Text ())+ `shouldBe` Left "fail" describe "HTTP.post" $ do it "returns the body when the request is 200" $ withConnManager $ \mngr ->@@ -112,5 +113,5 @@ (runMockServer (post mngr "http://example.com/path" [] (A.Object HM.empty)) failedResponse- :: Either String ())- `shouldBe` Left "\"fail\""+ :: Either T.Text ())+ `shouldBe` Left "fail"