mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-10-07 00:05:33 -04:00
Since #433, saving API resources nested under other API resources has not been the default. Instead, any instances where this should occur have been special cased with specific method implementations that would set the `#save_with_parent` flag when a field is written. This ended up causing some problems because as seen in #457, because places that we need to do this aren't well vetted, some were forgotten. This makes implementation of new fields that need this behavior simpler by implementing a `.save_nested_resource` metraprogramming method on the `APIResource` class. This can be called as necessary by any concrete API resource implementations. We replace existing implementatinos and also add one to `Subscription`, which had previously been suffering from a similar problem where its `#source` had not received a special case.
78 lines
2.2 KiB
Ruby
78 lines
2.2 KiB
Ruby
module Stripe
|
|
class Customer < APIResource
|
|
extend Stripe::APIOperations::Create
|
|
include Stripe::APIOperations::Delete
|
|
include Stripe::APIOperations::Save
|
|
extend Stripe::APIOperations::List
|
|
|
|
save_nested_resource :source
|
|
|
|
def add_invoice_item(params, opts={})
|
|
opts = @opts.merge(Util.normalize_opts(opts))
|
|
InvoiceItem.create(params.merge(:customer => id), opts)
|
|
end
|
|
|
|
def invoices(params={}, opts={})
|
|
opts = @opts.merge(Util.normalize_opts(opts))
|
|
Invoice.all(params.merge(:customer => id), opts)
|
|
end
|
|
|
|
def invoice_items(params={}, opts={})
|
|
opts = @opts.merge(Util.normalize_opts(opts))
|
|
InvoiceItem.all(params.merge(:customer => id), opts)
|
|
end
|
|
|
|
def upcoming_invoice(params={}, opts={})
|
|
opts = @opts.merge(Util.normalize_opts(opts))
|
|
Invoice.upcoming(params.merge(:customer => id), opts)
|
|
end
|
|
|
|
def charges(params={}, opts={})
|
|
opts = @opts.merge(Util.normalize_opts(opts))
|
|
Charge.all(params.merge(:customer => id), opts)
|
|
end
|
|
|
|
def create_upcoming_invoice(params={}, opts={})
|
|
opts = @opts.merge(Util.normalize_opts(opts))
|
|
Invoice.create(params.merge(:customer => id), opts)
|
|
end
|
|
|
|
def cancel_subscription(params={}, opts={})
|
|
response, opts = request(:delete, subscription_url, params, opts)
|
|
initialize_from({ :subscription => response }, opts, true)
|
|
subscription
|
|
end
|
|
|
|
def update_subscription(params={}, opts={})
|
|
response, opts = request(:post, subscription_url, params, opts)
|
|
initialize_from({ :subscription => response }, opts, true)
|
|
subscription
|
|
end
|
|
|
|
def create_subscription(params={}, opts={})
|
|
response, opts = request(:post, subscriptions_url, params, opts)
|
|
initialize_from({ :subscription => response }, opts, true)
|
|
subscription
|
|
end
|
|
|
|
def delete_discount
|
|
_, opts = request(:delete, discount_url)
|
|
initialize_from({ :discount => nil }, opts, true)
|
|
end
|
|
|
|
private
|
|
|
|
def discount_url
|
|
resource_url + '/discount'
|
|
end
|
|
|
|
def subscription_url
|
|
resource_url + '/subscription'
|
|
end
|
|
|
|
def subscriptions_url
|
|
resource_url + '/subscriptions'
|
|
end
|
|
end
|
|
end
|