packages feed

twitter-conduit 0.1.1.1 → 0.1.2

raw patch · 8 files changed

+101/−65 lines, 8 files

Files

.travis.yml view
@@ -1,51 +1,39 @@-language: sh-sudo: required--env:-  matrix:-    - GHCVER=7.4.2-    - GHCVER=7.6.3-    - GHCVER=7.8.4-    - GHCVER=7.10.1 CABAL_FLAGS="-frun-integrated-test"-  global:-    # HALCYON_AWS_ACCESS_KEY_ID-    - secure: "PTnc4TbawOwE6Z3v9QP5TRVYKg7FXU4PKgMqRPOy7HRwCriF+v4CxkyFgI2Ve614z85dF3kq9qZrhtyRuTSTL/SAu17Tz57+XhH0laGDF/7/h637ZRxy0+OBv/EDO0z6cJ1+8ndAl+5fbblQ8nmn5fgPrVCfbNIpujcjOSfs8+4="-    # HALCYON_AWS_SECRET_ACCESS_KEY-    - secure: "RCLM7gnzb0b4WgYeDQ+z1cn+IvsJMaqldLppJRM/b+oBeH5v+IZ0BL4hRk187iZsXJdMADC6MAeEchcV0rTseit/zKQAk6fx7360Sv+MdlzNbVHSiO7LpwbKTOvMfIQ5hB/S8oTuC1qmY18JhShO1lE6RpFsitwNdENRZv85fuQ="--    # OAUTH_CONSUMER_KEY-    - secure: "U3hh6wJf87tdZmwLtPyMQ0ci39ouKvTm/JCi0CCz2jaPvWZR+4Tt7aYV5WYqzjSmgfBOqKpXTpwFBcvvWRty8rI1b8OtrlljC1zUcgf/hsz3hfPtv+GKW/ldYnqg7znyeAdxWEF1a4JszKgOJaGMdX7zSpFewgwEq7T4jAlebLA="-    # OAUTH_CONSUMER_SECRET-    - secure: "I4BGd16zNQE3WjnwgdT7OM5sIIMtT9DMFPNdnWJPcgYndDovnFAUDoTomaGo0Wue4h64vGWl26f2Nm04i2upJXxkzFFtU5Az6cwUjzkOve1yqrkkyPFTXC8MLQYX3Zz8scQ8h1IJCn0Luu5HsHsool6IFZpiUovLZbDXmY44yH4="-    # OAUTH_ACCESS_TOKEN-    - secure: "dW2pYRplxJ7HmJEo3lMgLlzfdOylBvWiV4PJt1j4GMDPJBOu3RM0h3zNkkxDoS9D0wWRkBEH0iN2Bh08v2z7sJtF3f/kgLvPlOy5mNSYcozwMdHJRlJEcXaGULHbZ4p79lVIOdTAhY2WU2QdP7PEv0BiqqVcysnfK0TGkTa+KEc="-    # OAUTH_ACCESS_SECRET-    - secure: "I5hzi7sONDn8KJAhmkroHsGNJ2zUxYq2iGamTV9lgMUDH0bwpMx+guzfZr+fGesdlUphM0t+ZCh9YH8BoVJsjZ/db9u/lotg78DKp1QwhrWnISqWj6TIfXrSLPkBwY+xFtxl6Ihsjyl+ileiK5sb0C9mC+zXidgBqEM73miAokY="+sudo: false+language: c  matrix:-  allow_failures:-    - env: GHCVER=7.4.2-    - env: GHCVER=7.6.3+  include:+    - env: GHCVER=7.8.4 STACK_YAML=stack-lts-2.yml+      addons:+        apt:+          sources: [ hvr-ghc ]+          packages: [ ghc-7.8.4 ]+    - env: GHCVER=7.10.2 STACK_YAML=stack-lts-3.yml+      addons:+        apt:+          sources: [ hvr-ghc ]+          packages: [ ghc-7.10.2 ]  before_install:-  - eval "$( curl -sL https://github.com/mietek/halcyon/raw/master/setup.sh )"-  - export HALCYON_GHC_VERSION=$GHCVER HALCYON_CABAL_VERSION=1.22.4.0-  - export HALCYON_S3_BUCKET=himura-halcyon+  - mkdir -p ~/.local/bin+  - export PATH=~/.local/bin:$PATH+  - travis_retry curl -L https://github.com/commercialhaskell/stack/releases/download/v0.1.4.0/stack-0.1.4.0-x86_64-linux.tar.gz | tar xz -C ~/.local/bin+  - export PATH=/opt/ghc/$GHCVER/bin:$PATH  install:-  - HALCYON_SANDBOX_EXTRA_APPS="hpc-coveralls happy" HALCYON_SANDBOX_EXTRA_CONFIGURE_FLAGS="--enable-tests --only-dependencies $CABAL_FLAGS" halcyon build-  - ln -s /app/sandbox/cabal.sandbox.config .+  - travis_wait stack --no-terminal --skip-ghc-check setup+  - travis_wait stack --no-terminal --skip-ghc-check test --only-snapshot  script:-  - cabal configure --enable-tests --enable-library-coverage $CABAL_FLAGS-  - travis_wait run-cabal-test --cabal-name=cabal --show-details=always+  - travis_wait stack --no-terminal --skip-ghc-check test    # tests source distribution package-  - cabal sdist+  - mkdir -p ./.test-sdist+  - stack sdist 2>&1 | tee ./.test-sdist/sdist-log   - |     PKGNAME="$(cabal info . | awk '/^\*/{print $2}')"-    SRCTGZ="${PKGNAME}.tar.gz"-    cd dist/+    SRCTGZ=$(readlink -f $(awk '/^Wrote sdist tarball to / { print $5 }' sdist-log))+    cd ./.test-sdist     if [ -f "$SRCTGZ" ]; then       tar xvzf "$SRCTGZ"       cd "$PKGNAME"@@ -57,5 +45,6 @@       fi     fi -after_script:-  - hpc-coveralls --exclude-dir=tests tests+cache:+  directories:+    - ~/.stack
ChangeLog.md view
@@ -1,3 +1,8 @@+## 0.1.2++* Streaming API: Support multiple filters (#41)+* Include parameters in body for POST requests (#40)+ ## 0.1.1.1  * Fix warnings on GHC 7.10
Web/Twitter/Conduit/Base.hs view
@@ -68,10 +68,14 @@              -> IO HTTP.Request makeRequest' m url query = do     req <- HTTP.parseUrl url-    return $ req { HTTP.method = m-                 , HTTP.queryString = HT.renderSimpleQuery False query-                 , HTTP.checkStatus = \_ _ _ -> Nothing-                 }+    let params = HT.renderSimpleQuery False query+        addParams =+            if m == "POST"+            then HTTP.urlEncodedBody query+            else \r -> r { HTTP.queryString = params }+    return $ addParams $ req { HTTP.method = m+                             , HTTP.checkStatus = \_ _ _ -> Nothing+                             }  getResponse :: MonadResource m             => TWInfo
Web/Twitter/Conduit/Monad.hs view
@@ -69,9 +69,7 @@ runTW :: ( MonadBaseControl IO m          , MonadIO m          ) => TWInfo -> TW (ResourceT m) a -> m a-runTW info st = do-    mgr <- liftIO $ HTTP.newManager HTTP.tlsManagerSettings-    runResourceT $ runTWManager info mgr st+runTW info st = HTTP.withManager $ \mgr -> runTWManager info mgr st  runTWManager :: MonadBaseControl IO m => TWInfo -> HTTP.Manager -> TW (ResourceT m) a -> ResourceT m a runTWManager info mgr st = runReaderT st $ TWEnv info mgr
Web/Twitter/Conduit/Stream.hs view
@@ -11,6 +11,8 @@          Userstream        , userstream        , StatusesFilter+       , FilterParameter (..)+       , statusesFilter        , statusesFilterByFollow        , statusesFilterByTrack        -- , statusesFilterByLocation@@ -33,6 +35,7 @@ import qualified Data.Conduit as C import qualified Data.Conduit.List as CL import qualified Data.Conduit.Internal as CI+import qualified Data.List as L import qualified Data.Text as T import Control.Monad.IO.Class import Data.Aeson@@ -77,18 +80,44 @@     , "replies"     ] +-- https://dev.twitter.com/streaming/overview/request-parameters+data FilterParameter = Follow [UserId]+                     | Track [T.Text]++-- | Returns statuses/filter.json API query data.+--+-- >>> statusesFilter [Follow [1,2,3]]+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("follow","1,2,3")]+-- >>> statusesFilter [Track ["haskell","functional"]]+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("track","haskell,functional")]+-- >>> statusesFilter [Follow [1,2,3],Track ["haskell","functional"]]+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("follow","1,2,3"),("track","haskell,functional")]+statusesFilter :: [FilterParameter] -> APIRequest StatusesFilter StreamingAPI+statusesFilter = APIRequestPost statusesFilterEndpoint . L.map paramToQueryItem++paramToQueryItem :: FilterParameter -> APIQueryItem+paramToQueryItem (Follow userIds) = ("follow", PVIntegerArray userIds)+paramToQueryItem (Track texts) = ("track", PVStringArray texts)+ statusesFilterEndpoint :: String statusesFilterEndpoint = "https://stream.twitter.com/1.1/statuses/filter.json"  data StatusesFilter++-- | Returns statuses/filter.json API query data.+--+-- >>> statusesFilterByFollow [1,2,3]+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("follow","1,2,3")] statusesFilterByFollow :: [UserId] -> APIRequest StatusesFilter StreamingAPI-statusesFilterByFollow userIds =-    APIRequestPost statusesFilterEndpoint [("follow", PVIntegerArray userIds)]+statusesFilterByFollow userIds = statusesFilter [Follow userIds] +-- | Returns statuses/filter.json API query data.+--+-- >>> statusesFilterByTrack "haskell"+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("track","haskell")] statusesFilterByTrack :: T.Text -- ^ keyword                       -> APIRequest StatusesFilter StreamingAPI-statusesFilterByTrack keyword =-    APIRequestPost statusesFilterEndpoint [("track", PVString keyword)]+statusesFilterByTrack keyword = statusesFilter [Track [keyword]]  deriveHasParamInstances ''StatusesFilter     [ "language"
tests/doctests.hs view
@@ -2,19 +2,18 @@  import Build_doctests (deps) import Test.DocTest+import Data.Maybe+import System.Environment  main = do-  let sources =-          [ "Web/Twitter/Conduit.hs"-          ]-+  env <- getEnvironment+  let dist = fromMaybe "dist" $ lookup "HASKELL_DIST_DIR" env+      autogenDir = dist ++ "/build/autogen"+      args = [ "-i."+             , "-i" ++ autogenDir+             , "-optP-include"+             , "-optP" ++ autogenDir ++ "/cabal_macros.h"+             , "-hide-all-packages"+             ] ++ map ("-package=" ++) deps+      sources = ["Web/Twitter/Conduit.hs"]   doctest $ args ++ sources-  where-    args = ( "-i."-           : "-idist/build/autogen"-           : "-optP-include"-           : "-optPdist/build/autogen/cabal_macros.h"-           : "-hide-all-packages"-           : map ("-package=" ++) deps-           )-
tests/hlint.hs view
@@ -1,6 +1,7 @@ module Main where  import Control.Monad+import Data.Maybe import Language.Haskell.HLint import System.Environment import System.Exit@@ -8,5 +9,12 @@ main :: IO () main = do   args <- getArgs-  hints <- hlint $ ["Web", "--cpp-define=HLINT", "--cpp-ansi", "--cpp-file=dist/build/autogen/cabal_macros.h"] ++ args+  cabalMacros <- getCabalMacrosPath+  hints <- hlint $ ["Web", "--cpp-define=HLINT", "--cpp-ansi", "--cpp-file=" ++ cabalMacros] ++ args   unless (null hints) exitFailure++getCabalMacrosPath :: IO FilePath+getCabalMacrosPath = do+    env <- getEnvironment+    let dist = fromMaybe "dist" $ lookup "HASKELL_DIST_DIR" env+    return $ dist ++ "/build/autogen/cabal_macros.h"
twitter-conduit.cabal view
@@ -1,5 +1,5 @@ name:              twitter-conduit-version:           0.1.1.1+version:           0.1.2 license:           BSD3 license-file:      LICENSE author:            HATTORI Hiroki, Hideyuki Tanaka, Takahiro HIMURA@@ -117,7 +117,7 @@ test-suite spec_main   type: exitcode-stdio-1.0   main-is: spec_main.hs-  hs-source-dirs: tests, .+  hs-source-dirs: tests    if flag(run-integrated-test)     CPP-Options: -DRUN_INTEGRATED_TEST@@ -147,6 +147,7 @@     , hspec     , twitter-types >= 0.6     , twitter-types-lens >= 0.6+    , twitter-conduit    if flag(network-uri)     build-depends: network-uri >= 2.6@@ -222,6 +223,9 @@     build-depends: network-uri >= 2.6   else     build-depends: network < 2.6++  other-modules:+    Common  executable oauth_callback   main-is: oauth_callback.hs