# File generated from our OpenAPI spec # frozen_string_literal: true module Stripe class Customer < APIResource extend Stripe::APIOperations::Create include Stripe::APIOperations::Delete extend Stripe::APIOperations::List extend Stripe::APIOperations::Search include Stripe::APIOperations::Save extend Stripe::APIOperations::NestedResource OBJECT_NAME = "customer" nested_resource_class_methods :balance_transaction, operations: %i[create retrieve update list] nested_resource_class_methods :tax_id, operations: %i[create retrieve delete list] def create_funding_instructions(params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/customers/%s/funding_instructions", { customer: CGI.escape(self["id"]) }), params: params, opts: opts ) end def delete_discount(params = {}, opts = {}) request_stripe_object( method: :delete, path: format("/v1/customers/%s/discount", { customer: CGI.escape(self["id"]) }), params: params, opts: opts ) end def list_payment_methods(params = {}, opts = {}) request_stripe_object( method: :get, path: format("/v1/customers/%s/payment_methods", { customer: CGI.escape(self["id"]) }), params: params, opts: opts ) end def retrieve_payment_method(payment_method, params = {}, opts = {}) request_stripe_object( method: :get, path: format("/v1/customers/%s/payment_methods/%s", { customer: CGI.escape(self["id"]), payment_method: CGI.escape(payment_method) }), params: params, opts: opts ) end def self.create_funding_instructions(customer, params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/customers/%s/funding_instructions", { customer: CGI.escape(customer) }), params: params, opts: opts ) end def self.delete_discount(customer, params = {}, opts = {}) request_stripe_object( method: :delete, path: format("/v1/customers/%s/discount", { customer: CGI.escape(customer) }), params: params, opts: opts ) end def self.list_payment_methods(customer, params = {}, opts = {}) request_stripe_object( method: :get, path: format("/v1/customers/%s/payment_methods", { customer: CGI.escape(customer) }), params: params, opts: opts ) end def self.retrieve_payment_method( customer, payment_method, params = {}, opts = {} ) request_stripe_object( method: :get, path: format("/v1/customers/%s/payment_methods/%s", { customer: CGI.escape(customer), payment_method: CGI.escape(payment_method) }), params: params, opts: opts ) end save_nested_resource :source nested_resource_class_methods :source, operations: %i[create retrieve update delete list] # The API request for deleting a card or bank account and for detaching a # source object are the same. class << self alias detach_source delete_source end def self.search(params = {}, opts = {}) _search("/v1/customers/search", params, opts) end def self.search_auto_paging_each(params = {}, opts = {}, &blk) search(params, opts).auto_paging_each(&blk) end def self.retrieve_cash_balance(customer, params = {}, opts = {}) request_stripe_object( method: :get, path: format("/v1/customers/%s/cash_balance", { customer: CGI.escape(customer) }), params: params, opts: opts ) end def self.update_cash_balance(customer, params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/customers/%s/cash_balance", { customer: CGI.escape(customer) }), params: params, opts: opts ) end def test_helpers TestHelpers.new(self) end class TestHelpers < APIResourceTestHelpers RESOURCE_CLASS = Customer def self.fund_cash_balance(customer, params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/test_helpers/customers/%s/fund_cash_balance", { customer: CGI.escape(customer) }), params: params, opts: opts ) end def fund_cash_balance(params = {}, opts = {}) @resource.request_stripe_object( method: :post, path: format("/v1/test_helpers/customers/%s/fund_cash_balance", { customer: CGI.escape(@resource["id"]) }), params: params, opts: opts ) end end end end