packages feed

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 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"