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 +90/−0
- src/Web/Stripe/Subscription.hs +4/−1
- src/Web/Stripe/Types.hs +133/−0
- stripe-haskell.cabal +5/−2
- tests/Main.hs +4/−3
+ 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