diff --git a/.rubocop.yml b/.rubocop.yml index 610f57f6..9ed7e7fc 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -16,6 +16,7 @@ Layout/IndentHash: Metrics/LineLength: Exclude: - "test/**/*.rb" + - "lib/stripe/resources/**/*.rb" Metrics/MethodLength: # There's ~2 long methods in `StripeClient`. If we want to truncate those a diff --git a/lib/stripe.rb b/lib/stripe.rb index a8344adf..899a8ff0 100644 --- a/lib/stripe.rb +++ b/lib/stripe.rb @@ -26,6 +26,7 @@ # API resource support classes require "stripe/errors" +require "stripe/object_types" require "stripe/util" require "stripe/stripe_client" require "stripe/stripe_object" @@ -36,81 +37,7 @@ require "stripe/webhook" # Named API resources -require "stripe/account" -require "stripe/account_link" -require "stripe/alipay_account" -require "stripe/apple_pay_domain" -require "stripe/application_fee" -require "stripe/application_fee_refund" -require "stripe/balance" -require "stripe/balance_transaction" -require "stripe/bank_account" -require "stripe/bitcoin_receiver" -require "stripe/bitcoin_transaction" -require "stripe/capability" -require "stripe/card" -require "stripe/charge" -require "stripe/checkout/session" -require "stripe/country_spec" -require "stripe/coupon" -require "stripe/credit_note" -require "stripe/customer" -require "stripe/discount" -require "stripe/dispute" -require "stripe/ephemeral_key" -require "stripe/event" -require "stripe/exchange_rate" -require "stripe/file" -require "stripe/file_link" -require "stripe/invoice" -require "stripe/invoice_item" -require "stripe/invoice_line_item" -require "stripe/issuer_fraud_record" -require "stripe/issuing/authorization" -require "stripe/issuing/card" -require "stripe/issuing/card_details" -require "stripe/issuing/cardholder" -require "stripe/issuing/dispute" -require "stripe/issuing/transaction" -require "stripe/login_link" -require "stripe/order" -require "stripe/order_return" -require "stripe/payment_intent" -require "stripe/payment_method" -require "stripe/payout" -require "stripe/person" -require "stripe/plan" -require "stripe/product" -require "stripe/radar/early_fraud_warning" -require "stripe/radar/value_list" -require "stripe/radar/value_list_item" -require "stripe/recipient" -require "stripe/recipient_transfer" -require "stripe/refund" -require "stripe/reporting/report_run" -require "stripe/reporting/report_type" -require "stripe/reversal" -require "stripe/review" -require "stripe/sigma/scheduled_query_run" -require "stripe/sku" -require "stripe/source" -require "stripe/source_transaction" -require "stripe/subscription" -require "stripe/subscription_item" -require "stripe/subscription_schedule" -require "stripe/subscription_schedule_revision" -require "stripe/tax_id" -require "stripe/tax_rate" -require "stripe/terminal/connection_token" -require "stripe/terminal/location" -require "stripe/terminal/reader" -require "stripe/three_d_secure" -require "stripe/token" -require "stripe/topup" -require "stripe/transfer" -require "stripe/usage_record" -require "stripe/usage_record_summary" -require "stripe/webhook_endpoint" +require "stripe/resources" # OAuth require "stripe/oauth" diff --git a/lib/stripe/object_types.rb b/lib/stripe/object_types.rb new file mode 100644 index 00000000..906e59cf --- /dev/null +++ b/lib/stripe/object_types.rb @@ -0,0 +1,94 @@ +# frozen_string_literal: true + +# rubocop:disable Metrics/LineLength + +module Stripe + module ObjectTypes + def self.object_names_to_classes # rubocop:disable Metrics/MethodLength + { + # data structures + ListObject::OBJECT_NAME => ListObject, + + # business objects + Account::OBJECT_NAME => Account, + AccountLink::OBJECT_NAME => AccountLink, + AlipayAccount::OBJECT_NAME => AlipayAccount, + ApplePayDomain::OBJECT_NAME => ApplePayDomain, + ApplicationFee::OBJECT_NAME => ApplicationFee, + ApplicationFeeRefund::OBJECT_NAME => ApplicationFeeRefund, + Balance::OBJECT_NAME => Balance, + BalanceTransaction::OBJECT_NAME => BalanceTransaction, + BankAccount::OBJECT_NAME => BankAccount, + BitcoinReceiver::OBJECT_NAME => BitcoinReceiver, + BitcoinTransaction::OBJECT_NAME => BitcoinTransaction, + Capability::OBJECT_NAME => Capability, + Card::OBJECT_NAME => Card, + Charge::OBJECT_NAME => Charge, + Checkout::Session::OBJECT_NAME => Checkout::Session, + CountrySpec::OBJECT_NAME => CountrySpec, + Coupon::OBJECT_NAME => Coupon, + CreditNote::OBJECT_NAME => CreditNote, + Customer::OBJECT_NAME => Customer, + Discount::OBJECT_NAME => Discount, + Dispute::OBJECT_NAME => Dispute, + EphemeralKey::OBJECT_NAME => EphemeralKey, + Event::OBJECT_NAME => Event, + ExchangeRate::OBJECT_NAME => ExchangeRate, + File::OBJECT_NAME => File, + File::OBJECT_NAME_ALT => File, + FileLink::OBJECT_NAME => FileLink, + Invoice::OBJECT_NAME => Invoice, + InvoiceItem::OBJECT_NAME => InvoiceItem, + InvoiceLineItem::OBJECT_NAME => InvoiceLineItem, + IssuerFraudRecord::OBJECT_NAME => IssuerFraudRecord, + Issuing::Authorization::OBJECT_NAME => Issuing::Authorization, + Issuing::Card::OBJECT_NAME => Issuing::Card, + Issuing::CardDetails::OBJECT_NAME => Issuing::CardDetails, + Issuing::Cardholder::OBJECT_NAME => Issuing::Cardholder, + Issuing::Dispute::OBJECT_NAME => Issuing::Dispute, + Issuing::Transaction::OBJECT_NAME => Issuing::Transaction, + LoginLink::OBJECT_NAME => LoginLink, + Order::OBJECT_NAME => Order, + OrderReturn::OBJECT_NAME => OrderReturn, + PaymentIntent::OBJECT_NAME => PaymentIntent, + PaymentMethod::OBJECT_NAME => PaymentMethod, + Payout::OBJECT_NAME => Payout, + Person::OBJECT_NAME => Person, + Plan::OBJECT_NAME => Plan, + Product::OBJECT_NAME => Product, + Radar::EarlyFraudWarning::OBJECT_NAME => Radar::EarlyFraudWarning, + Radar::ValueList::OBJECT_NAME => Radar::ValueList, + Radar::ValueListItem::OBJECT_NAME => Radar::ValueListItem, + Recipient::OBJECT_NAME => Recipient, + RecipientTransfer::OBJECT_NAME => RecipientTransfer, + Refund::OBJECT_NAME => Refund, + Reporting::ReportRun::OBJECT_NAME => Reporting::ReportRun, + Reporting::ReportType::OBJECT_NAME => Reporting::ReportType, + Reversal::OBJECT_NAME => Reversal, + Review::OBJECT_NAME => Review, + SKU::OBJECT_NAME => SKU, + Sigma::ScheduledQueryRun::OBJECT_NAME => Sigma::ScheduledQueryRun, + Source::OBJECT_NAME => Source, + SourceTransaction::OBJECT_NAME => SourceTransaction, + Subscription::OBJECT_NAME => Subscription, + SubscriptionItem::OBJECT_NAME => SubscriptionItem, + SubscriptionSchedule::OBJECT_NAME => SubscriptionSchedule, + SubscriptionScheduleRevision::OBJECT_NAME => SubscriptionScheduleRevision, + TaxId::OBJECT_NAME => TaxId, + TaxRate::OBJECT_NAME => TaxRate, + Terminal::ConnectionToken::OBJECT_NAME => Terminal::ConnectionToken, + Terminal::Location::OBJECT_NAME => Terminal::Location, + Terminal::Reader::OBJECT_NAME => Terminal::Reader, + ThreeDSecure::OBJECT_NAME => ThreeDSecure, + Token::OBJECT_NAME => Token, + Topup::OBJECT_NAME => Topup, + Transfer::OBJECT_NAME => Transfer, + UsageRecord::OBJECT_NAME => UsageRecord, + UsageRecordSummary::OBJECT_NAME => UsageRecordSummary, + WebhookEndpoint::OBJECT_NAME => WebhookEndpoint, + } + end + end +end + +# rubocop:enable Metrics/LineLength diff --git a/lib/stripe/resources.rb b/lib/stripe/resources.rb new file mode 100644 index 00000000..30020621 --- /dev/null +++ b/lib/stripe/resources.rb @@ -0,0 +1,77 @@ +# frozen_string_literal: true + +require "stripe/resources/account" +require "stripe/resources/account_link" +require "stripe/resources/alipay_account" +require "stripe/resources/apple_pay_domain" +require "stripe/resources/application_fee" +require "stripe/resources/application_fee_refund" +require "stripe/resources/balance" +require "stripe/resources/balance_transaction" +require "stripe/resources/bank_account" +require "stripe/resources/bitcoin_receiver" +require "stripe/resources/bitcoin_transaction" +require "stripe/resources/capability" +require "stripe/resources/card" +require "stripe/resources/charge" +require "stripe/resources/checkout/session" +require "stripe/resources/country_spec" +require "stripe/resources/coupon" +require "stripe/resources/credit_note" +require "stripe/resources/customer" +require "stripe/resources/discount" +require "stripe/resources/dispute" +require "stripe/resources/ephemeral_key" +require "stripe/resources/event" +require "stripe/resources/exchange_rate" +require "stripe/resources/file" +require "stripe/resources/file_link" +require "stripe/resources/invoice" +require "stripe/resources/invoice_item" +require "stripe/resources/invoice_line_item" +require "stripe/resources/issuer_fraud_record" +require "stripe/resources/issuing/authorization" +require "stripe/resources/issuing/card" +require "stripe/resources/issuing/card_details" +require "stripe/resources/issuing/cardholder" +require "stripe/resources/issuing/dispute" +require "stripe/resources/issuing/transaction" +require "stripe/resources/login_link" +require "stripe/resources/order" +require "stripe/resources/order_return" +require "stripe/resources/payment_intent" +require "stripe/resources/payment_method" +require "stripe/resources/payout" +require "stripe/resources/person" +require "stripe/resources/plan" +require "stripe/resources/product" +require "stripe/resources/radar/early_fraud_warning" +require "stripe/resources/radar/value_list" +require "stripe/resources/radar/value_list_item" +require "stripe/resources/recipient" +require "stripe/resources/recipient_transfer" +require "stripe/resources/refund" +require "stripe/resources/reporting/report_run" +require "stripe/resources/reporting/report_type" +require "stripe/resources/reversal" +require "stripe/resources/review" +require "stripe/resources/sigma/scheduled_query_run" +require "stripe/resources/sku" +require "stripe/resources/source" +require "stripe/resources/source_transaction" +require "stripe/resources/subscription" +require "stripe/resources/subscription_item" +require "stripe/resources/subscription_schedule" +require "stripe/resources/subscription_schedule_revision" +require "stripe/resources/tax_id" +require "stripe/resources/tax_rate" +require "stripe/resources/terminal/connection_token" +require "stripe/resources/terminal/location" +require "stripe/resources/terminal/reader" +require "stripe/resources/three_d_secure" +require "stripe/resources/token" +require "stripe/resources/topup" +require "stripe/resources/transfer" +require "stripe/resources/usage_record" +require "stripe/resources/usage_record_summary" +require "stripe/resources/webhook_endpoint" diff --git a/lib/stripe/account.rb b/lib/stripe/resources/account.rb similarity index 97% rename from lib/stripe/account.rb rename to lib/stripe/resources/account.rb index 12ea5c2b..bb8b3e5d 100644 --- a/lib/stripe/account.rb +++ b/lib/stripe/resources/account.rb @@ -4,8 +4,8 @@ module Stripe class Account < APIResource extend Gem::Deprecate extend Stripe::APIOperations::Create - extend Stripe::APIOperations::List include Stripe::APIOperations::Delete + extend Stripe::APIOperations::List include Stripe::APIOperations::Save extend Stripe::APIOperations::NestedResource @@ -13,17 +13,23 @@ class Account < APIResource custom_method :reject, http_verb: :post - save_nested_resource :external_account nested_resource_class_methods :capability, operations: %i[retrieve update list], resource_plural: "capabilities" + nested_resource_class_methods :person, + operations: %i[create retrieve update delete list] + + def reject(params = {}, opts = {}) + resp, opts = request(:post, resource_url + "/reject", params, opts) + Util.convert_to_stripe_object(resp.data, opts) + end + + save_nested_resource :external_account + nested_resource_class_methods :external_account, - operations: %i[create retrieve update delete - list] + operations: %i[create retrieve update delete list] + nested_resource_class_methods :login_link, operations: %i[create] - nested_resource_class_methods :person, - operations: %i[create retrieve update delete - list] # This method is deprecated. Please use `#external_account=` instead. save_nested_resource :bank_account @@ -66,11 +72,6 @@ def persons(params = {}, opts = {}) # already has a capabilities property which is a hash and not the sub-list # of capabilities. - def reject(params = {}, opts = {}) - resp, opts = request(:post, resource_url + "/reject", params, opts) - initialize_from(resp.data, opts) - end - # Somewhat unfortunately, we attempt to do a special encoding trick when # serializing `additional_owners` under an account: when updating a value, # we actually send the update parameters up as an integer-indexed hash diff --git a/lib/stripe/account_link.rb b/lib/stripe/resources/account_link.rb similarity index 100% rename from lib/stripe/account_link.rb rename to lib/stripe/resources/account_link.rb diff --git a/lib/stripe/alipay_account.rb b/lib/stripe/resources/alipay_account.rb similarity index 100% rename from lib/stripe/alipay_account.rb rename to lib/stripe/resources/alipay_account.rb diff --git a/lib/stripe/apple_pay_domain.rb b/lib/stripe/resources/apple_pay_domain.rb similarity index 100% rename from lib/stripe/apple_pay_domain.rb rename to lib/stripe/resources/apple_pay_domain.rb diff --git a/lib/stripe/application_fee.rb b/lib/stripe/resources/application_fee.rb similarity index 100% rename from lib/stripe/application_fee.rb rename to lib/stripe/resources/application_fee.rb diff --git a/lib/stripe/application_fee_refund.rb b/lib/stripe/resources/application_fee_refund.rb similarity index 100% rename from lib/stripe/application_fee_refund.rb rename to lib/stripe/resources/application_fee_refund.rb diff --git a/lib/stripe/balance.rb b/lib/stripe/resources/balance.rb similarity index 100% rename from lib/stripe/balance.rb rename to lib/stripe/resources/balance.rb diff --git a/lib/stripe/balance_transaction.rb b/lib/stripe/resources/balance_transaction.rb similarity index 100% rename from lib/stripe/balance_transaction.rb rename to lib/stripe/resources/balance_transaction.rb diff --git a/lib/stripe/bank_account.rb b/lib/stripe/resources/bank_account.rb similarity index 95% rename from lib/stripe/bank_account.rb rename to lib/stripe/resources/bank_account.rb index 666cf43b..833f1383 100644 --- a/lib/stripe/bank_account.rb +++ b/lib/stripe/resources/bank_account.rb @@ -15,11 +15,9 @@ def verify(params = {}, opts = {}) def resource_url if respond_to?(:customer) - "#{Customer.resource_url}/#{CGI.escape(customer)}/sources" \ - "/#{CGI.escape(id)}" + "#{Customer.resource_url}/#{CGI.escape(customer)}/sources/#{CGI.escape(id)}" elsif respond_to?(:account) - "#{Account.resource_url}/#{CGI.escape(account)}/external_accounts" \ - "/#{CGI.escape(id)}" + "#{Account.resource_url}/#{CGI.escape(account)}/external_accounts/#{CGI.escape(id)}" end end diff --git a/lib/stripe/bitcoin_receiver.rb b/lib/stripe/resources/bitcoin_receiver.rb similarity index 72% rename from lib/stripe/bitcoin_receiver.rb rename to lib/stripe/resources/bitcoin_receiver.rb index d30e1184..9a5877bb 100644 --- a/lib/stripe/bitcoin_receiver.rb +++ b/lib/stripe/resources/bitcoin_receiver.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true module Stripe + # Directly creating or retrieving BitcoinReceivers is deprecated. Please use + # the Sources API instead: https://stripe.com/docs/sources/bitcoin class BitcoinReceiver < APIResource - # Directly creating or retrieving BitcoinReceivers is deprecated. Please use - # the Sources API instead: https://stripe.com/docs/sources/bitcoin extend Stripe::APIOperations::List OBJECT_NAME = "bitcoin_receiver".freeze @@ -14,8 +14,7 @@ def self.resource_url def resource_url if respond_to?(:customer) && !customer.nil? && customer != "" - "#{Customer.resource_url}/#{CGI.escape(customer)}/sources" \ - "/#{CGI.escape(id)}" + "#{Customer.resource_url}/#{CGI.escape(customer)}/sources/#{CGI.escape(id)}" else "#{self.class.resource_url}/#{CGI.escape(id)}" end diff --git a/lib/stripe/bitcoin_transaction.rb b/lib/stripe/resources/bitcoin_transaction.rb similarity index 100% rename from lib/stripe/bitcoin_transaction.rb rename to lib/stripe/resources/bitcoin_transaction.rb diff --git a/lib/stripe/capability.rb b/lib/stripe/resources/capability.rb similarity index 100% rename from lib/stripe/capability.rb rename to lib/stripe/resources/capability.rb diff --git a/lib/stripe/card.rb b/lib/stripe/resources/card.rb similarity index 92% rename from lib/stripe/card.rb rename to lib/stripe/resources/card.rb index b0b5807c..194ad2cc 100644 --- a/lib/stripe/card.rb +++ b/lib/stripe/resources/card.rb @@ -10,14 +10,11 @@ class Card < APIResource def resource_url if respond_to?(:recipient) && !recipient.nil? && !recipient.empty? - "#{Recipient.resource_url}/#{CGI.escape(recipient)}/cards" \ - "/#{CGI.escape(id)}" + "#{Recipient.resource_url}/#{CGI.escape(recipient)}/cards/#{CGI.escape(id)}" elsif respond_to?(:customer) && !customer.nil? && !customer.empty? - "#{Customer.resource_url}/#{CGI.escape(customer)}/sources" \ - "/#{CGI.escape(id)}" + "#{Customer.resource_url}/#{CGI.escape(customer)}/sources/#{CGI.escape(id)}" elsif respond_to?(:account) && !account.nil? && !account.empty? - "#{Account.resource_url}/#{CGI.escape(account)}/external_accounts" \ - "/#{CGI.escape(id)}" + "#{Account.resource_url}/#{CGI.escape(account)}/external_accounts/#{CGI.escape(id)}" end end diff --git a/lib/stripe/charge.rb b/lib/stripe/resources/charge.rb similarity index 100% rename from lib/stripe/charge.rb rename to lib/stripe/resources/charge.rb diff --git a/lib/stripe/checkout/session.rb b/lib/stripe/resources/checkout/session.rb similarity index 100% rename from lib/stripe/checkout/session.rb rename to lib/stripe/resources/checkout/session.rb diff --git a/lib/stripe/country_spec.rb b/lib/stripe/resources/country_spec.rb similarity index 100% rename from lib/stripe/country_spec.rb rename to lib/stripe/resources/country_spec.rb diff --git a/lib/stripe/coupon.rb b/lib/stripe/resources/coupon.rb similarity index 100% rename from lib/stripe/coupon.rb rename to lib/stripe/resources/coupon.rb diff --git a/lib/stripe/credit_note.rb b/lib/stripe/resources/credit_note.rb similarity index 89% rename from lib/stripe/credit_note.rb rename to lib/stripe/resources/credit_note.rb index 0b369f59..11c27bc8 100644 --- a/lib/stripe/credit_note.rb +++ b/lib/stripe/resources/credit_note.rb @@ -12,7 +12,7 @@ class CreditNote < APIResource def void_credit_note(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/void", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end end end diff --git a/lib/stripe/customer.rb b/lib/stripe/resources/customer.rb similarity index 97% rename from lib/stripe/customer.rb rename to lib/stripe/resources/customer.rb index d01150cd..3b703829 100644 --- a/lib/stripe/customer.rb +++ b/lib/stripe/resources/customer.rb @@ -4,20 +4,20 @@ module Stripe class Customer < APIResource extend Stripe::APIOperations::Create include Stripe::APIOperations::Delete - include Stripe::APIOperations::Save extend Stripe::APIOperations::List + include Stripe::APIOperations::Save extend Stripe::APIOperations::NestedResource OBJECT_NAME = "customer".freeze + nested_resource_class_methods :tax_id, + operations: %i[create retrieve delete list] + custom_method :delete_discount, http_verb: :delete, http_path: "discount" save_nested_resource :source nested_resource_class_methods :source, - operations: %i[create retrieve update delete - list] - nested_resource_class_methods :tax_id, - operations: %i[create retrieve delete list] + 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. diff --git a/lib/stripe/discount.rb b/lib/stripe/resources/discount.rb similarity index 100% rename from lib/stripe/discount.rb rename to lib/stripe/resources/discount.rb diff --git a/lib/stripe/dispute.rb b/lib/stripe/resources/dispute.rb similarity index 90% rename from lib/stripe/dispute.rb rename to lib/stripe/resources/dispute.rb index 2541a338..987900cb 100644 --- a/lib/stripe/dispute.rb +++ b/lib/stripe/resources/dispute.rb @@ -11,7 +11,7 @@ class Dispute < APIResource def close(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/close", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def close_url diff --git a/lib/stripe/ephemeral_key.rb b/lib/stripe/resources/ephemeral_key.rb similarity index 100% rename from lib/stripe/ephemeral_key.rb rename to lib/stripe/resources/ephemeral_key.rb diff --git a/lib/stripe/event.rb b/lib/stripe/resources/event.rb similarity index 100% rename from lib/stripe/event.rb rename to lib/stripe/resources/event.rb diff --git a/lib/stripe/exchange_rate.rb b/lib/stripe/resources/exchange_rate.rb similarity index 100% rename from lib/stripe/exchange_rate.rb rename to lib/stripe/resources/exchange_rate.rb diff --git a/lib/stripe/file.rb b/lib/stripe/resources/file.rb similarity index 98% rename from lib/stripe/file.rb rename to lib/stripe/resources/file.rb index c761f7d3..5880da92 100644 --- a/lib/stripe/file.rb +++ b/lib/stripe/resources/file.rb @@ -5,11 +5,12 @@ class File < APIResource extend Stripe::APIOperations::Create extend Stripe::APIOperations::List + OBJECT_NAME = "file".freeze + # This resource can have two different object names. In latter API # versions, only `file` is used, but since stripe-ruby may be used with # any API version, we need to support deserializing the older # `file_upload` object into the same class. - OBJECT_NAME = "file".freeze OBJECT_NAME_ALT = "file_upload".freeze def self.resource_url @@ -35,7 +36,9 @@ def self.create(params = {}, opts = {}) super end end +end +module Stripe # For backwards compatibility, the `File` class is aliased to `FileUpload`. FileUpload = File end diff --git a/lib/stripe/file_link.rb b/lib/stripe/resources/file_link.rb similarity index 100% rename from lib/stripe/file_link.rb rename to lib/stripe/resources/file_link.rb diff --git a/lib/stripe/invoice.rb b/lib/stripe/resources/invoice.rb similarity index 82% rename from lib/stripe/invoice.rb rename to lib/stripe/resources/invoice.rb index b9986e78..b0c85224 100644 --- a/lib/stripe/invoice.rb +++ b/lib/stripe/resources/invoice.rb @@ -17,28 +17,27 @@ class Invoice < APIResource def finalize_invoice(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/finalize", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def mark_uncollectible(params = {}, opts = {}) - resp, opts = request(:post, resource_url + "/mark_uncollectible", params, - opts) - initialize_from(resp.data, opts) + resp, opts = request(:post, resource_url + "/mark_uncollectible", params, opts) + Util.convert_to_stripe_object(resp.data, opts) end def pay(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/pay", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def send_invoice(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/send", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def void_invoice(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/void", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def self.upcoming(params, opts = {}) diff --git a/lib/stripe/invoice_item.rb b/lib/stripe/resources/invoice_item.rb similarity index 100% rename from lib/stripe/invoice_item.rb rename to lib/stripe/resources/invoice_item.rb diff --git a/lib/stripe/invoice_line_item.rb b/lib/stripe/resources/invoice_line_item.rb similarity index 100% rename from lib/stripe/invoice_line_item.rb rename to lib/stripe/resources/invoice_line_item.rb diff --git a/lib/stripe/issuer_fraud_record.rb b/lib/stripe/resources/issuer_fraud_record.rb similarity index 100% rename from lib/stripe/issuer_fraud_record.rb rename to lib/stripe/resources/issuer_fraud_record.rb diff --git a/lib/stripe/issuing/authorization.rb b/lib/stripe/resources/issuing/authorization.rb similarity index 84% rename from lib/stripe/issuing/authorization.rb rename to lib/stripe/resources/issuing/authorization.rb index eb13be21..718be0f6 100644 --- a/lib/stripe/issuing/authorization.rb +++ b/lib/stripe/resources/issuing/authorization.rb @@ -13,12 +13,12 @@ class Authorization < APIResource def approve(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/approve", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def decline(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/decline", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end end end diff --git a/lib/stripe/issuing/card.rb b/lib/stripe/resources/issuing/card.rb similarity index 100% rename from lib/stripe/issuing/card.rb rename to lib/stripe/resources/issuing/card.rb diff --git a/lib/stripe/issuing/card_details.rb b/lib/stripe/resources/issuing/card_details.rb similarity index 100% rename from lib/stripe/issuing/card_details.rb rename to lib/stripe/resources/issuing/card_details.rb diff --git a/lib/stripe/issuing/cardholder.rb b/lib/stripe/resources/issuing/cardholder.rb similarity index 100% rename from lib/stripe/issuing/cardholder.rb rename to lib/stripe/resources/issuing/cardholder.rb diff --git a/lib/stripe/issuing/dispute.rb b/lib/stripe/resources/issuing/dispute.rb similarity index 100% rename from lib/stripe/issuing/dispute.rb rename to lib/stripe/resources/issuing/dispute.rb diff --git a/lib/stripe/issuing/transaction.rb b/lib/stripe/resources/issuing/transaction.rb similarity index 100% rename from lib/stripe/issuing/transaction.rb rename to lib/stripe/resources/issuing/transaction.rb diff --git a/lib/stripe/login_link.rb b/lib/stripe/resources/login_link.rb similarity index 100% rename from lib/stripe/login_link.rb rename to lib/stripe/resources/login_link.rb diff --git a/lib/stripe/order.rb b/lib/stripe/resources/order.rb similarity index 70% rename from lib/stripe/order.rb rename to lib/stripe/resources/order.rb index a6eda3e7..19a32c33 100644 --- a/lib/stripe/order.rb +++ b/lib/stripe/resources/order.rb @@ -12,12 +12,12 @@ class Order < APIResource custom_method :return_order, http_verb: :post, http_path: "returns" def pay(params = {}, opts = {}) - resp, opts = request(:post, pay_url, params, opts) - initialize_from(resp.data, opts) + resp, opts = request(:post, resource_url + "/pay", params, opts) + Util.convert_to_stripe_object(resp.data, opts) end - def return_order(params, opts = {}) - resp, opts = request(:post, returns_url, params, opts) + def return_order(params = {}, opts = {}) + resp, opts = request(:post, resource_url + "/returns", params, opts) Util.convert_to_stripe_object(resp.data, opts) end diff --git a/lib/stripe/order_return.rb b/lib/stripe/resources/order_return.rb similarity index 100% rename from lib/stripe/order_return.rb rename to lib/stripe/resources/order_return.rb diff --git a/lib/stripe/payment_intent.rb b/lib/stripe/resources/payment_intent.rb similarity index 82% rename from lib/stripe/payment_intent.rb rename to lib/stripe/resources/payment_intent.rb index 5bbf8fbe..2cf9c998 100644 --- a/lib/stripe/payment_intent.rb +++ b/lib/stripe/resources/payment_intent.rb @@ -14,17 +14,17 @@ class PaymentIntent < APIResource def cancel(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/cancel", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def capture(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/capture", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def confirm(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/confirm", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end end end diff --git a/lib/stripe/payment_method.rb b/lib/stripe/resources/payment_method.rb similarity index 84% rename from lib/stripe/payment_method.rb rename to lib/stripe/resources/payment_method.rb index 4dd3fad1..c2d12625 100644 --- a/lib/stripe/payment_method.rb +++ b/lib/stripe/resources/payment_method.rb @@ -13,12 +13,12 @@ class PaymentMethod < APIResource def attach(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/attach", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def detach(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/detach", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end end end diff --git a/lib/stripe/payout.rb b/lib/stripe/resources/payout.rb similarity index 90% rename from lib/stripe/payout.rb rename to lib/stripe/resources/payout.rb index d9e1d480..351b8c33 100644 --- a/lib/stripe/payout.rb +++ b/lib/stripe/resources/payout.rb @@ -12,7 +12,7 @@ class Payout < APIResource def cancel(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/cancel", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end def cancel_url diff --git a/lib/stripe/person.rb b/lib/stripe/resources/person.rb similarity index 100% rename from lib/stripe/person.rb rename to lib/stripe/resources/person.rb diff --git a/lib/stripe/plan.rb b/lib/stripe/resources/plan.rb similarity index 100% rename from lib/stripe/plan.rb rename to lib/stripe/resources/plan.rb diff --git a/lib/stripe/product.rb b/lib/stripe/resources/product.rb similarity index 100% rename from lib/stripe/product.rb rename to lib/stripe/resources/product.rb diff --git a/lib/stripe/radar/early_fraud_warning.rb b/lib/stripe/resources/radar/early_fraud_warning.rb similarity index 100% rename from lib/stripe/radar/early_fraud_warning.rb rename to lib/stripe/resources/radar/early_fraud_warning.rb diff --git a/lib/stripe/radar/value_list.rb b/lib/stripe/resources/radar/value_list.rb similarity index 100% rename from lib/stripe/radar/value_list.rb rename to lib/stripe/resources/radar/value_list.rb diff --git a/lib/stripe/radar/value_list_item.rb b/lib/stripe/resources/radar/value_list_item.rb similarity index 100% rename from lib/stripe/radar/value_list_item.rb rename to lib/stripe/resources/radar/value_list_item.rb diff --git a/lib/stripe/recipient.rb b/lib/stripe/resources/recipient.rb similarity index 100% rename from lib/stripe/recipient.rb rename to lib/stripe/resources/recipient.rb diff --git a/lib/stripe/recipient_transfer.rb b/lib/stripe/resources/recipient_transfer.rb similarity index 100% rename from lib/stripe/recipient_transfer.rb rename to lib/stripe/resources/recipient_transfer.rb diff --git a/lib/stripe/refund.rb b/lib/stripe/resources/refund.rb similarity index 100% rename from lib/stripe/refund.rb rename to lib/stripe/resources/refund.rb diff --git a/lib/stripe/reporting/report_run.rb b/lib/stripe/resources/reporting/report_run.rb similarity index 100% rename from lib/stripe/reporting/report_run.rb rename to lib/stripe/resources/reporting/report_run.rb diff --git a/lib/stripe/reporting/report_type.rb b/lib/stripe/resources/reporting/report_type.rb similarity index 100% rename from lib/stripe/reporting/report_type.rb rename to lib/stripe/resources/reporting/report_type.rb diff --git a/lib/stripe/reversal.rb b/lib/stripe/resources/reversal.rb similarity index 100% rename from lib/stripe/reversal.rb rename to lib/stripe/resources/reversal.rb diff --git a/lib/stripe/review.rb b/lib/stripe/resources/review.rb similarity index 86% rename from lib/stripe/review.rb rename to lib/stripe/resources/review.rb index 8eb0e62b..de7570a1 100644 --- a/lib/stripe/review.rb +++ b/lib/stripe/resources/review.rb @@ -10,7 +10,7 @@ class Review < APIResource def approve(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/approve", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end end end diff --git a/lib/stripe/sigma/scheduled_query_run.rb b/lib/stripe/resources/sigma/scheduled_query_run.rb similarity index 100% rename from lib/stripe/sigma/scheduled_query_run.rb rename to lib/stripe/resources/sigma/scheduled_query_run.rb diff --git a/lib/stripe/sku.rb b/lib/stripe/resources/sku.rb similarity index 100% rename from lib/stripe/sku.rb rename to lib/stripe/resources/sku.rb diff --git a/lib/stripe/source.rb b/lib/stripe/resources/source.rb similarity index 95% rename from lib/stripe/source.rb rename to lib/stripe/resources/source.rb index e5c9bd6a..8e960b9a 100644 --- a/lib/stripe/source.rb +++ b/lib/stripe/resources/source.rb @@ -9,6 +9,11 @@ class Source < APIResource custom_method :verify, http_verb: :post + def verify(params = {}, opts = {}) + resp, opts = request(:post, resource_url + "/verify", params, opts) + Util.convert_to_stripe_object(resp.data, opts) + end + def detach(params = {}, opts = {}) if !respond_to?(:customer) || customer.nil? || customer.empty? raise NotImplementedError, @@ -33,10 +38,5 @@ def source_transactions(params = {}, opts = {}) opts) Util.convert_to_stripe_object(resp.data, opts) end - - def verify(params = {}, opts = {}) - resp, opts = request(:post, resource_url + "/verify", params, opts) - initialize_from(resp.data, opts) - end end end diff --git a/lib/stripe/source_transaction.rb b/lib/stripe/resources/source_transaction.rb similarity index 100% rename from lib/stripe/source_transaction.rb rename to lib/stripe/resources/source_transaction.rb diff --git a/lib/stripe/subscription.rb b/lib/stripe/resources/subscription.rb similarity index 100% rename from lib/stripe/subscription.rb rename to lib/stripe/resources/subscription.rb index 0b64f80a..0d077d44 100644 --- a/lib/stripe/subscription.rb +++ b/lib/stripe/resources/subscription.rb @@ -2,10 +2,10 @@ module Stripe class Subscription < APIResource - extend Stripe::APIOperations::List extend Stripe::APIOperations::Create - include Stripe::APIOperations::Save include Stripe::APIOperations::Delete + extend Stripe::APIOperations::List + include Stripe::APIOperations::Save OBJECT_NAME = "subscription".freeze diff --git a/lib/stripe/subscription_item.rb b/lib/stripe/resources/subscription_item.rb similarity index 90% rename from lib/stripe/subscription_item.rb rename to lib/stripe/resources/subscription_item.rb index 33d625ee..99bd624b 100644 --- a/lib/stripe/subscription_item.rb +++ b/lib/stripe/resources/subscription_item.rb @@ -10,8 +10,7 @@ class SubscriptionItem < APIResource OBJECT_NAME = "subscription_item".freeze def usage_record_summaries(params = {}, opts = {}) - resp, opts = request(:get, resource_url + "/usage_record_summaries", - params, opts) + resp, opts = request(:get, resource_url + "/usage_record_summaries", params, opts) Util.convert_to_stripe_object(resp.data, opts) end end diff --git a/lib/stripe/subscription_schedule.rb b/lib/stripe/resources/subscription_schedule.rb similarity index 65% rename from lib/stripe/subscription_schedule.rb rename to lib/stripe/resources/subscription_schedule.rb index c8020d7d..6516b99e 100644 --- a/lib/stripe/subscription_schedule.rb +++ b/lib/stripe/resources/subscription_schedule.rb @@ -12,19 +12,16 @@ class SubscriptionSchedule < APIResource custom_method :cancel, http_verb: :post custom_method :release, http_verb: :post - nested_resource_class_methods :revision, - operations: %i[retrieve list] + nested_resource_class_methods :revision, operations: %i[retrieve list] def cancel(params = {}, opts = {}) - url = resource_url + "/cancel" - resp, opts = request(:post, url, params, opts) - initialize_from(resp.data, opts) + resp, opts = request(:post, resource_url + "/cancel", params, opts) + Util.convert_to_stripe_object(resp.data, opts) end def release(params = {}, opts = {}) - url = resource_url + "/release" - resp, opts = request(:post, url, params, opts) - initialize_from(resp.data, opts) + resp, opts = request(:post, resource_url + "/release", params, opts) + Util.convert_to_stripe_object(resp.data, opts) end def revisions(params = {}, opts = {}) diff --git a/lib/stripe/subscription_schedule_revision.rb b/lib/stripe/resources/subscription_schedule_revision.rb similarity index 100% rename from lib/stripe/subscription_schedule_revision.rb rename to lib/stripe/resources/subscription_schedule_revision.rb diff --git a/lib/stripe/tax_id.rb b/lib/stripe/resources/tax_id.rb similarity index 100% rename from lib/stripe/tax_id.rb rename to lib/stripe/resources/tax_id.rb diff --git a/lib/stripe/tax_rate.rb b/lib/stripe/resources/tax_rate.rb similarity index 100% rename from lib/stripe/tax_rate.rb rename to lib/stripe/resources/tax_rate.rb diff --git a/lib/stripe/terminal/connection_token.rb b/lib/stripe/resources/terminal/connection_token.rb similarity index 100% rename from lib/stripe/terminal/connection_token.rb rename to lib/stripe/resources/terminal/connection_token.rb diff --git a/lib/stripe/terminal/location.rb b/lib/stripe/resources/terminal/location.rb similarity index 100% rename from lib/stripe/terminal/location.rb rename to lib/stripe/resources/terminal/location.rb diff --git a/lib/stripe/terminal/reader.rb b/lib/stripe/resources/terminal/reader.rb similarity index 100% rename from lib/stripe/terminal/reader.rb rename to lib/stripe/resources/terminal/reader.rb diff --git a/lib/stripe/three_d_secure.rb b/lib/stripe/resources/three_d_secure.rb similarity index 100% rename from lib/stripe/three_d_secure.rb rename to lib/stripe/resources/three_d_secure.rb diff --git a/lib/stripe/token.rb b/lib/stripe/resources/token.rb similarity index 100% rename from lib/stripe/token.rb rename to lib/stripe/resources/token.rb diff --git a/lib/stripe/topup.rb b/lib/stripe/resources/topup.rb similarity index 88% rename from lib/stripe/topup.rb rename to lib/stripe/resources/topup.rb index 5468a9c8..76defd7f 100644 --- a/lib/stripe/topup.rb +++ b/lib/stripe/resources/topup.rb @@ -12,7 +12,7 @@ class Topup < APIResource def cancel(params = {}, opts = {}) resp, opts = request(:post, resource_url + "/cancel", params, opts) - initialize_from(resp.data, opts) + Util.convert_to_stripe_object(resp.data, opts) end end end diff --git a/lib/stripe/transfer.rb b/lib/stripe/resources/transfer.rb similarity index 71% rename from lib/stripe/transfer.rb rename to lib/stripe/resources/transfer.rb index aef837c7..cd6655a3 100644 --- a/lib/stripe/transfer.rb +++ b/lib/stripe/resources/transfer.rb @@ -14,13 +14,14 @@ class Transfer < APIResource nested_resource_class_methods :reversal, operations: %i[create retrieve update list] - def cancel - resp, api_key = request(:post, cancel_url) - initialize_from(resp.data, api_key) + def cancel(params = {}, opts = {}) + resp, opts = request(:post, resource_url + "/cancel", params, opts) + Util.convert_to_stripe_object(resp.data, opts) end def cancel_url resource_url + "/cancel" end + deprecate :cancel_url, :none, 2019, 11 end end diff --git a/lib/stripe/usage_record.rb b/lib/stripe/resources/usage_record.rb similarity index 100% rename from lib/stripe/usage_record.rb rename to lib/stripe/resources/usage_record.rb diff --git a/lib/stripe/usage_record_summary.rb b/lib/stripe/resources/usage_record_summary.rb similarity index 100% rename from lib/stripe/usage_record_summary.rb rename to lib/stripe/resources/usage_record_summary.rb diff --git a/lib/stripe/webhook_endpoint.rb b/lib/stripe/resources/webhook_endpoint.rb similarity index 100% rename from lib/stripe/webhook_endpoint.rb rename to lib/stripe/resources/webhook_endpoint.rb diff --git a/lib/stripe/util.rb b/lib/stripe/util.rb index 7a978d6b..e4036b8f 100644 --- a/lib/stripe/util.rb +++ b/lib/stripe/util.rb @@ -39,91 +39,8 @@ def self.objects_to_ids(obj) end end - def self.object_classes # rubocop:disable Metrics/MethodLength - # rubocop:disable Metrics/LineLength - @object_classes ||= { - # data structures - ListObject::OBJECT_NAME => ListObject, - - # business objects - Account::OBJECT_NAME => Account, - AccountLink::OBJECT_NAME => AccountLink, - AlipayAccount::OBJECT_NAME => AlipayAccount, - ApplePayDomain::OBJECT_NAME => ApplePayDomain, - ApplicationFee::OBJECT_NAME => ApplicationFee, - ApplicationFeeRefund::OBJECT_NAME => ApplicationFeeRefund, - Balance::OBJECT_NAME => Balance, - BalanceTransaction::OBJECT_NAME => BalanceTransaction, - BankAccount::OBJECT_NAME => BankAccount, - BitcoinReceiver::OBJECT_NAME => BitcoinReceiver, - BitcoinTransaction::OBJECT_NAME => BitcoinTransaction, - Capability::OBJECT_NAME => Capability, - Card::OBJECT_NAME => Card, - Charge::OBJECT_NAME => Charge, - Checkout::Session::OBJECT_NAME => Checkout::Session, - CountrySpec::OBJECT_NAME => CountrySpec, - Coupon::OBJECT_NAME => Coupon, - CreditNote::OBJECT_NAME => CreditNote, - Customer::OBJECT_NAME => Customer, - Discount::OBJECT_NAME => Discount, - Dispute::OBJECT_NAME => Dispute, - EphemeralKey::OBJECT_NAME => EphemeralKey, - Event::OBJECT_NAME => Event, - ExchangeRate::OBJECT_NAME => ExchangeRate, - File::OBJECT_NAME => File, - File::OBJECT_NAME_ALT => File, - FileLink::OBJECT_NAME => FileLink, - Invoice::OBJECT_NAME => Invoice, - InvoiceItem::OBJECT_NAME => InvoiceItem, - InvoiceLineItem::OBJECT_NAME => InvoiceLineItem, - IssuerFraudRecord::OBJECT_NAME => IssuerFraudRecord, - Issuing::Authorization::OBJECT_NAME => Issuing::Authorization, - Issuing::Card::OBJECT_NAME => Issuing::Card, - Issuing::CardDetails::OBJECT_NAME => Issuing::CardDetails, - Issuing::Cardholder::OBJECT_NAME => Issuing::Cardholder, - Issuing::Dispute::OBJECT_NAME => Issuing::Dispute, - Issuing::Transaction::OBJECT_NAME => Issuing::Transaction, - LoginLink::OBJECT_NAME => LoginLink, - Order::OBJECT_NAME => Order, - OrderReturn::OBJECT_NAME => OrderReturn, - PaymentIntent::OBJECT_NAME => PaymentIntent, - PaymentMethod::OBJECT_NAME => PaymentMethod, - Payout::OBJECT_NAME => Payout, - Person::OBJECT_NAME => Person, - Plan::OBJECT_NAME => Plan, - Product::OBJECT_NAME => Product, - Radar::EarlyFraudWarning::OBJECT_NAME => Radar::EarlyFraudWarning, - Radar::ValueList::OBJECT_NAME => Radar::ValueList, - Radar::ValueListItem::OBJECT_NAME => Radar::ValueListItem, - Recipient::OBJECT_NAME => Recipient, - RecipientTransfer::OBJECT_NAME => RecipientTransfer, - Refund::OBJECT_NAME => Refund, - Reporting::ReportRun::OBJECT_NAME => Reporting::ReportRun, - Reporting::ReportType::OBJECT_NAME => Reporting::ReportType, - Reversal::OBJECT_NAME => Reversal, - Review::OBJECT_NAME => Review, - SKU::OBJECT_NAME => SKU, - Sigma::ScheduledQueryRun::OBJECT_NAME => Sigma::ScheduledQueryRun, - Source::OBJECT_NAME => Source, - SourceTransaction::OBJECT_NAME => SourceTransaction, - Subscription::OBJECT_NAME => Subscription, - SubscriptionItem::OBJECT_NAME => SubscriptionItem, - SubscriptionSchedule::OBJECT_NAME => SubscriptionSchedule, - SubscriptionScheduleRevision::OBJECT_NAME => SubscriptionScheduleRevision, - TaxId::OBJECT_NAME => TaxId, - TaxRate::OBJECT_NAME => TaxRate, - Terminal::ConnectionToken::OBJECT_NAME => Terminal::ConnectionToken, - Terminal::Location::OBJECT_NAME => Terminal::Location, - Terminal::Reader::OBJECT_NAME => Terminal::Reader, - ThreeDSecure::OBJECT_NAME => ThreeDSecure, - Token::OBJECT_NAME => Token, - Topup::OBJECT_NAME => Topup, - Transfer::OBJECT_NAME => Transfer, - UsageRecord::OBJECT_NAME => UsageRecord, - UsageRecordSummary::OBJECT_NAME => UsageRecordSummary, - WebhookEndpoint::OBJECT_NAME => WebhookEndpoint, - } - # rubocop:enable Metrics/LineLength + def self.object_classes + @object_classes ||= Stripe::ObjectTypes.object_names_to_classes end # Converts a hash of fields or an array of hashes into a +StripeObject+ or