stripe-ruby/lib/stripe/customer.rb
Brandur c796958516 Generalize saving nested resources
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.
2016-08-30 11:52:16 -07:00

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