packages feed

stripe-haskell 0.1.1.2 → 0.1.3.0

raw patch · 5 files changed

+236/−6 lines, 5 filesdep ~randomPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: random

API changes (from Hackage documentation)

+ Web.Stripe.Bitcoin: BitcoinReceiver :: BitcoinReceiverId -> Text -> UTCTime -> Bool -> Bool -> Integer -> Integer -> Integer -> Integer -> Text -> Currency -> Bool -> Text -> Bool -> Maybe Text -> Text -> MetaData -> Maybe Text -> Maybe Transactions -> Maybe PaymentId -> Maybe CustomerId -> BitcoinReceiver
+ Web.Stripe.Bitcoin: BitcoinReceiverId :: Text -> BitcoinReceiverId
+ Web.Stripe.Bitcoin: BitcoinTransaction :: BitcoinTransactionId -> Text -> UTCTime -> Integer -> Integer -> Currency -> BitcoinReceiverId -> BitcoinTransaction
+ Web.Stripe.Bitcoin: BitcoinTransactionId :: Text -> BitcoinTransactionId
+ Web.Stripe.Bitcoin: Email :: Text -> Email
+ Web.Stripe.Bitcoin: StripeList :: [a] -> Text -> Text -> Maybe Int -> Bool -> StripeList a
+ Web.Stripe.Bitcoin: btcActive :: BitcoinReceiver -> Bool
+ Web.Stripe.Bitcoin: btcAmount :: BitcoinReceiver -> Integer
+ Web.Stripe.Bitcoin: btcAmountReceived :: BitcoinReceiver -> Integer
+ Web.Stripe.Bitcoin: btcBitcoinAmount :: BitcoinReceiver -> Integer
+ Web.Stripe.Bitcoin: btcBitcoinAmountReceived :: BitcoinReceiver -> Integer
+ Web.Stripe.Bitcoin: btcBitcoinUri :: BitcoinReceiver -> Text
+ Web.Stripe.Bitcoin: btcCreated :: BitcoinReceiver -> UTCTime
+ Web.Stripe.Bitcoin: btcCurrency :: BitcoinReceiver -> Currency
+ Web.Stripe.Bitcoin: btcCustomer :: BitcoinReceiver -> Maybe CustomerId
+ Web.Stripe.Bitcoin: btcDescription :: BitcoinReceiver -> Maybe Text
+ Web.Stripe.Bitcoin: btcEmail :: BitcoinReceiver -> Text
+ Web.Stripe.Bitcoin: btcFilled :: BitcoinReceiver -> Bool
+ Web.Stripe.Bitcoin: btcId :: BitcoinReceiver -> BitcoinReceiverId
+ Web.Stripe.Bitcoin: btcInboundAddress :: BitcoinReceiver -> Text
+ Web.Stripe.Bitcoin: btcLiveMode :: BitcoinReceiver -> Bool
+ Web.Stripe.Bitcoin: btcMetadata :: BitcoinReceiver -> MetaData
+ Web.Stripe.Bitcoin: btcObject :: BitcoinReceiver -> Text
+ Web.Stripe.Bitcoin: btcPayment :: BitcoinReceiver -> Maybe PaymentId
+ Web.Stripe.Bitcoin: btcRefundAddress :: BitcoinReceiver -> Maybe Text
+ Web.Stripe.Bitcoin: btcTransactionAmount :: BitcoinTransaction -> Integer
+ Web.Stripe.Bitcoin: btcTransactionBitcoinAmount :: BitcoinTransaction -> Integer
+ Web.Stripe.Bitcoin: btcTransactionCreated :: BitcoinTransaction -> UTCTime
+ Web.Stripe.Bitcoin: btcTransactionCurrency :: BitcoinTransaction -> Currency
+ Web.Stripe.Bitcoin: btcTransactionId :: BitcoinTransaction -> BitcoinTransactionId
+ Web.Stripe.Bitcoin: btcTransactionObject :: BitcoinTransaction -> Text
+ Web.Stripe.Bitcoin: btcTransactionReceiver :: BitcoinTransaction -> BitcoinReceiverId
+ Web.Stripe.Bitcoin: btcTransactions :: BitcoinReceiver -> Maybe Transactions
+ Web.Stripe.Bitcoin: btcUncapturedFunds :: BitcoinReceiver -> Bool
+ Web.Stripe.Bitcoin: createReceiver :: Integer -> Email -> Stripe BitcoinReceiver
+ Web.Stripe.Bitcoin: data BitcoinReceiver
+ Web.Stripe.Bitcoin: data BitcoinTransaction
+ Web.Stripe.Bitcoin: data StripeList a
+ Web.Stripe.Bitcoin: getReceiver :: BitcoinReceiverId -> Stripe BitcoinReceiver
+ Web.Stripe.Bitcoin: hasMore :: StripeList a -> Bool
+ Web.Stripe.Bitcoin: list :: StripeList a -> [a]
+ Web.Stripe.Bitcoin: listReceivers :: Maybe Limit -> StartingAfter BitcoinReceiverId -> EndingBefore BitcoinReceiverId -> Stripe (StripeList BitcoinReceiver)
+ Web.Stripe.Bitcoin: newtype BitcoinReceiverId
+ Web.Stripe.Bitcoin: newtype BitcoinTransactionId
+ Web.Stripe.Bitcoin: newtype Email
+ Web.Stripe.Bitcoin: object :: StripeList a -> Text
+ Web.Stripe.Bitcoin: stripeUrl :: StripeList a -> Text
+ Web.Stripe.Bitcoin: totalCount :: StripeList a -> Maybe Int
- Web.Stripe.Subscription: updateSubscription :: CustomerId -> SubscriptionId -> Maybe CouponId -> MetaData -> Stripe Subscription
+ Web.Stripe.Subscription: updateSubscription :: CustomerId -> SubscriptionId -> Maybe CouponId -> Maybe PlanId -> MetaData -> Stripe Subscription

Files

+ src/Web/Stripe/Bitcoin.hs view
@@ -0,0 +1,90 @@+{-# LANGUAGE OverloadedStrings #-}+-------------------------------------------+-- |+-- Module      : Web.Stripe.Bitcoin+-- Copyright   : (c) David Johnson, 2015+-- Maintainer  : djohnson.m@gmail.com+-- Stability   : experimental+-- Portability : POSIX+--+-- < https://stripe.com/docs/api#bitcoin_receivers >+-- < https://stripe.com/docs/guides/bitcoin >+--+-- @+-- import Web.Stripe         +-- import Web.Stripe.Bitcoin+--+-- main :: IO ()+-- main = do+--   let config = SecretKey "secret_key"+--   result <- stripe config listAllReceivers+--   case result of+--     Right receivers  -> print receivers+--     Left stripeError -> print stripeError+-- @+module Web.Stripe.Bitcoin+    ( -- * API+      createReceiver+    , getReceiver+    , listReceivers+      -- * Types+    , BitcoinReceiver      (..)+    , BitcoinReceiverId    (..)+    , BitcoinTransaction   (..)+    , BitcoinTransactionId (..)+    , Email                (..)+    , StripeList           (..)+    ) where++import           Web.Stripe.Client.Internal ( Method (GET, POST)+                                            , Stripe+                                            , StripeRequest (..)+                                            , (</>)+                                            , callAPI+                                            , getParams+                                            , toText )+import           Web.Stripe.Types++------------------------------------------------------------------------------+-- | Retrieve the object that represents your Stripe account+createReceiver+ :: Integer -- ^ Amount+ -> Email   -- ^ Email+ -> Stripe BitcoinReceiver+createReceiver amount (Email email) = callAPI request+  where request = StripeRequest POST url params+        url     = "bitcoin/receivers"+        params  = getParams [ ("currency", Just "usd")+                            , ("amount", Just $ toText amount )+                            , ("email", Just email )+                            ]++------------------------------------------------------------------------------+-- | Retrieve a `BitcoinReceiver`+getReceiver+ :: BitcoinReceiverId+ -> Stripe BitcoinReceiver+getReceiver (BitcoinReceiverId receiverId) = callAPI request+  where request = StripeRequest GET url params+        url     = "bitcoin/receivers" </> receiverId+        params  = []++------------------------------------------------------------------------------+-- | Retrieve a list of `BitcoinReceiver`s+listReceivers+  :: Maybe Limit          -- ^ Defaults to 10 if `Nothing` specified+  -> StartingAfter BitcoinReceiverId  -- ^ Paginate starting after the following `BitcoinReceiverId`+  -> EndingBefore BitcoinReceiverId  -- ^ Paginate ending before the following `BitcoinReceiverId`+  -> Stripe (StripeList BitcoinReceiver)+listReceivers+  limit+  startingAfter+  endingBefore  = callAPI request+  where+    request = StripeRequest GET url params+    url     = "bitcoin/receivers"+    params  = getParams [+            ("limit", toText `fmap` limit )+          , ("starting_after", (\(BitcoinReceiverId x) -> x) `fmap` startingAfter)+          , ("ending_before", (\(BitcoinReceiverId x) -> x) `fmap` endingBefore)+          ]
src/Web/Stripe/Subscription.hs view
@@ -150,17 +150,20 @@     :: CustomerId      -- ^ The `CustomerId` of the `Subscription` to update     -> SubscriptionId  -- ^ The `SubscriptionId` of the `Subscription` to update     -> Maybe CouponId  -- ^ Optional: The `Coupon` of the `Subscription` to update+    -> Maybe PlanId    -- ^ Optional: The id `Plan` to switch the `Subscription` to     -> MetaData     -> Stripe Subscription updateSubscription     customerid     (SubscriptionId subscriptionid)     couponid+    planid     metadata    = callAPI request   where request = StripeRequest POST url params         url     = "customers" </> getCustomerId customerid </> "subscriptions" </> subscriptionid         params  = toMetaData metadata ++ getParams [-           ("coupon", (\(CouponId x) -> x) `fmap` couponid)+            ("coupon", (\(CouponId x) -> x) `fmap` couponid)+          , ("plan",   (\(PlanId x) -> x) `fmap` planid)           ]  ------------------------------------------------------------------------------
src/Web/Stripe/Types.hs view
@@ -2070,3 +2070,136 @@    parseJSON (String "zar") = pure ZAR    parseJSON (String "zmw") = pure ZMW    parseJSON _ = pure UnknownCurrency++------------------------------------------------------------------------------+-- | BTC ReceiverObject+data BitcoinReceiver = BitcoinReceiver {+       btcId                    :: BitcoinReceiverId+    ,  btcObject                :: Text+    ,  btcCreated               :: UTCTime+    ,  btcLiveMode              :: Bool+    ,  btcActive                :: Bool+    ,  btcAmount                :: Integer+    ,  btcAmountReceived        :: Integer+    ,  btcBitcoinAmount         :: Integer+    ,  btcBitcoinAmountReceived :: Integer+    ,  btcBitcoinUri            :: Text+    ,  btcCurrency              :: Currency+    ,  btcFilled                :: Bool+    ,  btcInboundAddress        :: Text+    ,  btcUncapturedFunds       :: Bool+    ,  btcDescription           :: Maybe Text+    ,  btcEmail                 :: Text+    ,  btcMetadata              :: MetaData+    ,  btcRefundAddress         :: Maybe Text+    ,  btcTransactions          :: Maybe Transactions+    ,  btcPayment               :: Maybe PaymentId +    ,  btcCustomer              :: Maybe CustomerId+    } deriving (Show, Eq)++------------------------------------------------------------------------------+-- | FromJSON for BitcoinReceiverId+instance FromJSON BitcoinReceiver where+   parseJSON (Object o) =+     BitcoinReceiver <$> (BitcoinReceiverId <$> o .: "id")+                     <*> o .: "object"  +                     <*> (fromSeconds <$> o .: "created") +                     <*> o .: "livemode"  +                     <*> o .: "active"  +                     <*> o .: "amount"  +                     <*> o .: "amount_received"  +                     <*> o .: "bitcoin_amount"  +                     <*> o .: "bitcoin_amount_received"  +                     <*> o .: "bitcoin_uri"  +                     <*> o .: "currency"  +                     <*> o .: "filled"  +                     <*> o .: "inbound_address"  +                     <*> o .: "uncaptured_funds"  +                     <*> o .:? "description"  +                     <*> o .: "email"  +                     <*> (H.toList <$> o .: "metadata")+                     <*> o .:? "refund_address"  +                     <*> o .:? "transactions"+                     <*> (fmap PaymentId <$> o .:? "payment")+                     <*> (fmap CustomerId <$> o .:? "customer")+   parseJSON _ = mzero++------------------------------------------------------------------------------+-- | Bitcoin Transactions+data Transactions = Transactions {+      transactionsObject     :: Text+    , transactionsTotalCount :: Integer+    , transactionsHasMore    :: Bool+    , transactionsURL        :: Text+    , transactions           :: [BitcoinTransaction]+    } deriving (Show, Eq)++------------------------------------------------------------------------------+-- | Bitcoin Transactions data+instance FromJSON Transactions where+   parseJSON (Object o) =+     Transactions <$> o .: "object"  +                  <*> o .: "total_count"  +                  <*> o .: "has_more"  +                  <*> o .: "url"  +                  <*> o .: "data"  +   parseJSON _ = mzero++------------------------------------------------------------------------------+-- | Bitcoin Transaction+data BitcoinTransaction = BitcoinTransaction {+         btcTransactionId            :: BitcoinTransactionId+       , btcTransactionObject        :: Text+       , btcTransactionCreated       :: UTCTime+       , btcTransactionAmount        :: Integer+       , btcTransactionBitcoinAmount :: Integer+       , btcTransactionCurrency      :: Currency+       , btcTransactionReceiver      :: BitcoinReceiverId+      } deriving (Show, Eq)++------------------------------------------------------------------------------+-- | FromJSON BitcoinTransaction+instance FromJSON BitcoinTransaction where+   parseJSON (Object o) =+     BitcoinTransaction <$> o .: "id"+                        <*> o .: "object"+                        <*> (fromSeconds <$> o .: "created")+                        <*> o .: "amount"+                        <*> o .: "bitcoin_amount"+                        <*> o .: "currency"+                        <*> o .: "receiver"+   parseJSON _ = mzero++------------------------------------------------------------------------------+-- | BitcoinTransactionId+newtype BitcoinTransactionId =+    BitcoinTransactionId Text+      deriving (Show, Eq)++------------------------------------------------------------------------------+-- | FromJSON BitcoinTransactionId+instance FromJSON BitcoinTransactionId where+   parseJSON (String o) = pure $ BitcoinTransactionId o+   parseJSON _ = mzero++------------------------------------------------------------------------------+-- | BTC ReceiverId+newtype BitcoinReceiverId = BitcoinReceiverId Text+    deriving (Show, Eq)++------------------------------------------------------------------------------+-- | FromJSON for BitcoinReceiverId+instance FromJSON BitcoinReceiverId where+   parseJSON (String x) = pure $ BitcoinReceiverId x+   parseJSON _ = mzero++------------------------------------------------------------------------------+-- | BTC PaymentId+newtype PaymentId = PaymentId Text+    deriving (Show, Eq)++------------------------------------------------------------------------------+-- | FromJSON for PaymentId+instance FromJSON PaymentId where+   parseJSON (String x) = pure $ PaymentId x+   parseJSON _ = mzero
stripe-haskell.cabal view
@@ -1,5 +1,5 @@ name:                stripe-haskell-version:             0.1.1.2+version:             0.1.3.0 synopsis:            Stripe API for Haskell license:             MIT license-file:        LICENSE@@ -112,9 +112,10 @@                     , base >=4.6 && <4.8                     , bytestring                     , either-                    , http-streams                     , hspec >= 2.1.4+                    , http-streams                     , random+                    , random >= 1.1                     , stripe-haskell                     , text                     , time@@ -132,6 +133,7 @@                      , http-streams                      , io-streams                      , mtl >= 2.1.3.1+                     , random >= 1.1                      , text                      , time                      , transformers@@ -151,6 +153,7 @@                        Web.Stripe.ApplicationFee                        Web.Stripe.ApplicationFeeRefund                        Web.Stripe.Balance+                       Web.Stripe.Bitcoin                        Web.Stripe.Card                        Web.Stripe.Charge                        Web.Stripe.Coupon
tests/Main.hs view
@@ -2,9 +2,8 @@ {-# LANGUAGE RecordWildCards   #-} module Main where -import           Test.Hspec                 (hspec)+import           Test.Hspec                 (hspec,parallel) import           Test.Config                (getConfig)- import           Test.Account               (accountTests) import           Test.ApplicationFee        (applicationFeeTests) import           Test.ApplicationFeeRefund  (applicationFeeRefundTests)@@ -25,14 +24,16 @@ import           Test.Transfer              (transferTests) import           Test.Raw                   (rawTest) import           Test.Event                 (eventTests)+import           Test.Bitcoin               (bitcoinTests)  ------------------------------------------------------------------------------ -- | Main test function entry point main :: IO () main = do   config <- getConfig-  hspec $ do+  hspec $ parallel $ do     rawTest config+    bitcoinTests config     chargeTests config     refundTests config     customerTests config