Skip to content

Commit

Permalink
Merge pull request #122 from code-corps/120-add-stripe-token
Browse files Browse the repository at this point in the history
Add Subscription and Token
  • Loading branch information
joshsmith authored Nov 13, 2016
2 parents 04ab6d4 + a58fecf commit 30ff8c2
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 4 deletions.
3 changes: 1 addition & 2 deletions lib/stripe/customer.ex
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ defmodule Stripe.Customer do
"""
@spec create(t, Keyword.t) :: {:ok, t} | {:error, Exception.t}
def create(customer, opts \\ []) do
endpoint = @plural_endpoint
Stripe.Request.create(endpoint, customer, @valid_create_keys, %__MODULE__{}, opts)
Stripe.Request.create(@plural_endpoint, customer, @valid_create_keys, %__MODULE__{}, opts)
end

@doc """
Expand Down
3 changes: 1 addition & 2 deletions lib/stripe/plan.ex
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ defmodule Stripe.Plan do
"""
@spec create(t, Keyword.t) :: stripe_response
def create(plan, opts \\ []) do
endpoint = @plural_endpoint
Stripe.Request.create(endpoint, plan, @valid_create_keys, %__MODULE__{}, opts)
Stripe.Request.create(@plural_endpoint, plan, @valid_create_keys, %__MODULE__{}, opts)
end

@doc """
Expand Down
76 changes: 76 additions & 0 deletions lib/stripe/subscription.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
defmodule Stripe.Subscription do
@moduledoc """
Work with Stripe subscription objects.
You can:
- Create a subscription
- Retrieve a subscription
- Update a subscription
- Delete a subscription
Stripe API reference: https://stripe.com/docs/api#subscription
"""

alias Stripe.Util

@type t :: %__MODULE__{}
@type stripe_response :: {:ok, t} | {:error, Exception.t}
@type stripe_delete_response :: :ok | {:error, Exception.t}

defstruct [
:id, :application_fee_percent, :cancel_at_period_end, :canceled_at,
:created, :current_period_end, :current_period_start, :customer,
:discount, :ended_at, :livemode, :metadata, :plan, :quantity, :source,
:start, :status, :tax_percent, :trial_end, :trial_start
]

@plural_endpoint "subscriptions"

@valid_create_keys [
:application_fee_percent, :coupon, :customer, :metadata, :plan, :quantity,
:source, :tax_percent, :trial_end
]

@valid_update_keys [
:application_fee_percent, :coupon, :metadata, :plan, :prorate,
:proration_date, :quantity, :source, :tax_percent, :trial_end
]

@doc """
Create a subscription.
"""
@spec create(t, Keyword.t) :: stripe_response
def create(subscription, opts \\ []) do
Stripe.Request.create(@plural_endpoint, subscription, @valid_create_keys, %__MODULE__{}, opts)
end

@doc """
Retrieve a subscription.
"""
@spec retrieve(binary, Keyword.t) :: stripe_response
def retrieve(id, opts \\ []) do
endpoint = @plural_endpoint <> "/" <> id
Stripe.Request.retrieve(endpoint, %__MODULE__{}, opts)
end

@doc """
Update a subscription.
Takes the `id` and a map of changes.
"""
@spec update(t, map, list) :: stripe_response
def update(id, changes, opts \\ []) do
endpoint = @plural_endpoint <> "/" <> id
Stripe.Request.update(endpoint, changes, @valid_update_keys, %__MODULE__{}, opts)
end

@doc """
Delete a subscription.
"""
@spec delete(binary, list) :: stripe_delete_response
def delete(id, opts \\ []) do
endpoint = @plural_endpoint <> "/" <> id
Stripe.Request.delete(endpoint, opts)
end
end
52 changes: 52 additions & 0 deletions lib/stripe/token.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
defmodule Stripe.Token do
@moduledoc """
Work with Stripe token objects.
You can:
- Create a token for a Connect customer with a card
- Retrieve a token
Stripe API reference: https://stripe.com/docs/api#token
"""

alias Stripe.Util

@type t :: %__MODULE__{}
@type stripe_response :: {:ok, t} | {:error, Exception.t}
@type stripe_delete_response :: :ok | {:error, Exception.t}

defstruct [
:id, :bank_account, :card, :client_ip, :created, :livemode, :type, :used
]

@plural_endpoint "tokens"

@valid_create_connect_keys [
:card, :customer
]

@doc """
Create a token for a Connect customer with a card belonging to that customer.
You must pass in the account number for the Stripe Connect account
in `opts`.
"""
@spec create_on_connect_account(String.t, String.t, Keyword.t) :: stripe_response
def create_on_connect_account(customer_id, customer_card_id, opts = [connect_account: _]) do
body = %{
card: customer_card_id,
customer: customer_id
}
Stripe.Request.create(@plural_endpoint, body, @valid_create_connect_keys, %__MODULE__{}, opts)
end

@doc """
Retrieve a token.
"""
@spec retrieve(binary, Keyword.t) :: stripe_response
def retrieve(id, opts \\ []) do
endpoint = @plural_endpoint <> "/" <> id
Stripe.Request.retrieve(endpoint, %__MODULE__{}, opts)
end
end

0 comments on commit 30ff8c2

Please sign in to comment.