Skip to content

Commit

Permalink
Merge branch 'master' into issues/add_tax_rate
Browse files Browse the repository at this point in the history
  • Loading branch information
maartenvanvliet authored May 25, 2019
2 parents ac93197 + 43e3a39 commit 90636cb
Show file tree
Hide file tree
Showing 16 changed files with 991 additions and 15 deletions.
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ before_install:
fi
- export PATH=$PATH:$PWD/stripe-mock/stripe-mock_${STRIPE_MOCK_VERSION}/
script:
- |
if [ "$TRAVIS_ELIXIR_VERSION" == "1.8" ]; then
mix format --dry-run --check-formatted;
fi
- mix coveralls.travis
- MIX_ENV=dev mix dialyzer --halt-exit-status
after_script:
Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,29 @@
# Latest

## 2.2.3

- [Configurable json serializer - You can now use Jason instead of Poison](https://github.com/code-corps/stripity_stripe/pull/446)
- [Support for voiding invoices](https://github.com/code-corps/stripity_stripe/pull/444)
- [Use singular time units in System.system_time/1](https://github.com/code-corps/stripity_stripe/pull/450)
- [Expanded configuration options](https://github.com/code-corps/stripity_stripe/pull/447)
- [Add invoice settings to customer/invoice objects](https://github.com/code-corps/stripity_stripe/pull/451)
- [Upgrade to 2018-11-08 Stripe API](https://github.com/code-corps/stripity_stripe/pull/439)
- [Fixed bug in `Usage.retrieve`](https://github.com/code-corps/stripity_stripe/pull/433)
- [Add elixir 1.8 to test matrix](https://github.com/code-corps/stripity_stripe/pull/449)
- [Add authorization header api key to deauthorization endpoint]((https://github.com/code-corps/stripity_stripe/pull/465)
- [Add support for idempotent post requests](https://github.com/code-corps/stripity_stripe/pull/461)
- [Support new Checkout flow](https://github.com/code-corps/stripity_stripe/pull/466)
- [Add `receipt_url` to the return Charge data](https://github.com/code-corps/stripity_stripe/pull/467)
- [Fixed some bugs in `Review` struct fields](https://github.com/code-corps/stripity_stripe/pull/468)
- [Add basic support for payment intents](https://github.com/code-corps/stripity_stripe/pull/470)
- [Make `client_secret` optional](https://github.com/code-corps/stripity_stripe/pull/473)
- [Update hackney requirement to 1.15](https://github.com/code-corps/stripity_stripe/pull/475)
- [Upgrade to ex doc 0.20](https://github.com/code-corps/stripity_stripe/pull/486)
- [Upgrade stripe mock to 0.55](https://github.com/code-corps/stripity_stripe/pull/485)
- [Remove unused Bypass dependency](https://github.com/code-corps/stripity_stripe/pull/88)
- [Implement `assert_stripe_requested/3` test helper](https://github.com/code-corps/stripity_stripe/pull/487)
- Misc documentation improvements

## 2.2.2

- [Upgrade stripe-mock 0.38](https://github.com/code-corps/stripity_stripe/pull/436)
Expand Down
3 changes: 3 additions & 0 deletions lib/stripe/converter.ex
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ defmodule Stripe.Converter do
checkout.session
country_spec
coupon
credit_note
customer
discount
dispute
Expand All @@ -36,6 +37,7 @@ defmodule Stripe.Converter do
order
order_return
payment_intent
payment_method
payout
plan
product
Expand All @@ -46,6 +48,7 @@ defmodule Stripe.Converter do
source
subscription
subscription_item
subscription_schedule
tax_rate
transfer
transfer_reversal
Expand Down
162 changes: 162 additions & 0 deletions lib/stripe/payment_methods/payment_method.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
defmodule Stripe.PaymentMethod do
@moduledoc """
Work with Stripe payment method objects.
Stripe API reference: https://stripe.com/docs/api/payment_methods
"""

use Stripe.Entity
import Stripe.Request

@type t :: %__MODULE__{
id: Stripe.id(),
object: String.t(),
billing_details: %{
address: Stripe.Types.address(),
email: String.t() | nil,
name: String.t() | nil,
phone: String.t() | nil
},
card: Stripe.Card.t() | nil,
created: Stripe.timestamp(),
customer: Stripe.id() | Stripe.Customer.t() | nil,
livemode: boolean,
metadata: Stripe.Types.metadata(),
type: String.t()
}

defstruct [
:id,
:object,
:billing_details,
:card,
:created,
:customer,
:livemode,
:metadata,
:type
]

defp plural_endpoint() do
"payment_methods"
end

defp plural_endpoint(%{payment_method: payment_method}) do
plural_endpoint() <> "/" <> get_id!(payment_method)
end

@type billing_details :: %{
optional(:address) => Stripe.Types.address(),
optional(:email) => String.t(),
optional(:name) => String.t(),
optional(:phone) => String.t()
}

@type card :: %{
:exp_month => integer,
:exp_year => integer,
:number => String.t(),
:cvc => String.t()
}

@doc """
Create a payment method.
"""
@spec create(params, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()}
when params: %{
:type => String.t(),
optional(:billing_details) => billing_details(),
optional(:card) => card(),
optional(:metadata) => Stripe.Types.metadata()
}
def create(%{} = params, opts \\ []) do
new_request(opts)
|> put_endpoint(plural_endpoint())
|> put_params(params)
|> put_method(:post)
|> make_request()
end

@doc """
Retrieve a payment method.
"""
@spec retrieve(Stripe.id() | t, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()}
def retrieve(id, opts \\ []) do
new_request(opts)
|> put_endpoint(plural_endpoint() <> "/#{get_id!(id)}")
|> put_method(:get)
|> make_request()
end

@doc """
Update a card.
Takes the `id` and a map of changes
"""
@spec update(Stripe.id() | t, params, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()}
when params: %{
optional(:billing_details) => billing_details(),
optional(:card) => card(),
optional(:metadata) => Stripe.Types.metadata()
}
def update(id, %{} = params, opts \\ []) do
new_request(opts)
|> put_endpoint(plural_endpoint() <> "/#{get_id!(id)}")
|> put_method(:post)
|> put_params(params)
|> make_request()
end

@doc """
List all payment methods.
"""
@spec list(params, Stripe.options()) :: {:ok, Stripe.List.t(t)} | {:error, Stripe.Error.t()}
when params: %{
:customer => Stripe.id() | Stripe.Customer.t(),
:type => String.t(),
optional(:ending_before) => t | Stripe.id(),
optional(:limit) => 1..100,
optional(:starting_after) => t | Stripe.id()
}
def list(%{customer: _} = params, opts \\ []) do
endpoint = plural_endpoint()

new_request(opts)
|> put_endpoint(endpoint)
|> put_method(:get)
|> put_params(params |> Map.update!(:customer, &get_id!/1))
|> make_request()
end

@doc """
Attach payment_method to customer
"""
@spec attach(params, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()}
when params: %{
:customer => Stripe.id() | Stripe.Customer.t(),
:payment_method => Stripe.id() | t()
}
def attach(%{customer: customer, payment_method: _} = params, opts \\ []) do
endpoint = plural_endpoint(params) <> "/attach"

new_request(opts)
|> put_endpoint(endpoint)
|> put_method(:post)
|> put_params(%{customer: get_id!(customer)})
|> make_request()
end

@doc """
Detach payment_method from customer
"""
@spec detach(params, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()}
when params: %{:payment_method => Stripe.id() | t()}
def detach(%{payment_method: _} = params, opts \\ []) do
endpoint = plural_endpoint(params) <> "/detach"

new_request(opts)
|> put_endpoint(endpoint)
|> put_method(:post)
|> make_request()
end
end
2 changes: 1 addition & 1 deletion lib/stripe/radar/review.ex
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ defmodule Stripe.Review do
latitude: float,
longitude: float,
region: String.t()
}
}

@type t :: %__MODULE__{
id: Stripe.id(),
Expand Down
Loading

0 comments on commit 90636cb

Please sign in to comment.