dodopayments 0.0.1.pre.alpha.0 → 1.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.ignore +2 -0
- data/CHANGELOG.md +132 -0
- data/README.md +84 -23
- data/SECURITY.md +27 -0
- data/lib/dodopayments/client.rb +15 -19
- data/lib/dodopayments/errors.rb +168 -159
- data/lib/dodopayments/internal/default_page_number_pagination.rb +91 -0
- data/lib/dodopayments/internal/transport/base_client.rb +486 -0
- data/lib/dodopayments/internal/transport/pooled_net_requester.rb +197 -0
- data/lib/dodopayments/internal/type/array_of.rb +143 -0
- data/lib/dodopayments/internal/type/base_model.rb +423 -0
- data/lib/dodopayments/internal/type/base_page.rb +47 -0
- data/lib/dodopayments/internal/type/boolean.rb +60 -0
- data/lib/dodopayments/internal/type/converter.rb +271 -0
- data/lib/dodopayments/internal/type/enum.rb +129 -0
- data/lib/dodopayments/internal/type/hash_of.rb +163 -0
- data/lib/dodopayments/internal/type/io_like.rb +77 -0
- data/lib/dodopayments/internal/type/request_parameters.rb +49 -0
- data/lib/dodopayments/internal/type/union.rb +232 -0
- data/lib/dodopayments/internal/type/unknown.rb +64 -0
- data/lib/dodopayments/internal/util.rb +782 -0
- data/lib/dodopayments/internal.rb +12 -0
- data/lib/dodopayments/models/attach_existing_customer.rb +2 -2
- data/lib/dodopayments/models/billing_address.rb +2 -2
- data/lib/dodopayments/models/country_code.rb +7 -3
- data/lib/dodopayments/models/create_new_customer.rb +5 -5
- data/lib/dodopayments/models/customer.rb +3 -2
- data/lib/dodopayments/models/customer_create_params.rb +5 -4
- data/lib/dodopayments/models/customer_limited_details.rb +2 -2
- data/lib/dodopayments/models/customer_list_params.rb +5 -4
- data/lib/dodopayments/models/customer_portal_session.rb +2 -2
- data/lib/dodopayments/models/customer_request.rb +5 -6
- data/lib/dodopayments/models/customer_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/customer_update_params.rb +5 -4
- data/lib/dodopayments/models/customers/customer_portal_create_params.rb +6 -5
- data/lib/dodopayments/models/discount.rb +7 -6
- data/lib/dodopayments/models/discount_create_params.rb +13 -12
- data/lib/dodopayments/models/discount_delete_params.rb +5 -4
- data/lib/dodopayments/models/discount_list_params.rb +5 -4
- data/lib/dodopayments/models/discount_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/discount_type.rb +7 -2
- data/lib/dodopayments/models/discount_update_params.rb +11 -10
- data/lib/dodopayments/models/dispute.rb +4 -3
- data/lib/dodopayments/models/dispute_list_params.rb +5 -4
- data/lib/dodopayments/models/dispute_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/dispute_stage.rb +7 -2
- data/lib/dodopayments/models/dispute_status.rb +7 -2
- data/lib/dodopayments/models/intent_status.rb +7 -2
- data/lib/dodopayments/models/invoices/payment_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/license_activate_params.rb +5 -4
- data/lib/dodopayments/models/license_deactivate_params.rb +5 -4
- data/lib/dodopayments/models/license_key.rb +4 -3
- data/lib/dodopayments/models/license_key_duration.rb +2 -2
- data/lib/dodopayments/models/license_key_instance.rb +3 -2
- data/lib/dodopayments/models/license_key_instance_list_params.rb +5 -4
- data/lib/dodopayments/models/license_key_instance_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/license_key_instance_update_params.rb +5 -4
- data/lib/dodopayments/models/license_key_list_params.rb +5 -4
- data/lib/dodopayments/models/license_key_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/license_key_status.rb +7 -2
- data/lib/dodopayments/models/license_key_update_params.rb +9 -8
- data/lib/dodopayments/models/license_validate_params.rb +5 -4
- data/lib/dodopayments/models/license_validate_response.rb +4 -3
- data/lib/dodopayments/models/misc_list_supported_countries_params.rb +5 -4
- data/lib/dodopayments/models/misc_list_supported_countries_response.rb +2 -1
- data/lib/dodopayments/models/one_time_product_cart_item.rb +4 -3
- data/lib/dodopayments/models/payment.rb +18 -11
- data/lib/dodopayments/models/payment_create_params.rb +232 -9
- data/lib/dodopayments/models/payment_create_response.rb +6 -5
- data/lib/dodopayments/models/payment_list_params.rb +5 -4
- data/lib/dodopayments/models/payment_list_response.rb +12 -5
- data/lib/dodopayments/models/payment_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/payout_list_params.rb +5 -4
- data/lib/dodopayments/models/payout_list_response.rb +21 -6
- data/lib/dodopayments/models/price.rb +41 -30
- data/lib/dodopayments/models/product.rb +17 -10
- data/lib/dodopayments/models/product_create_params.rb +16 -11
- data/lib/dodopayments/models/product_delete_params.rb +5 -4
- data/lib/dodopayments/models/product_list_params.rb +10 -9
- data/lib/dodopayments/models/product_list_response.rb +30 -17
- data/lib/dodopayments/models/product_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/product_unarchive_params.rb +5 -4
- data/lib/dodopayments/models/product_update_params.rb +22 -17
- data/lib/dodopayments/models/products/image_update_params.rb +6 -5
- data/lib/dodopayments/models/products/image_update_response.rb +3 -2
- data/lib/dodopayments/models/refund.rb +11 -4
- data/lib/dodopayments/models/refund_create_params.rb +6 -13
- data/lib/dodopayments/models/refund_list_params.rb +5 -4
- data/lib/dodopayments/models/refund_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/refund_status.rb +7 -2
- data/lib/dodopayments/models/subscription.rb +21 -7
- data/lib/dodopayments/models/subscription_charge_params.rb +27 -0
- data/lib/dodopayments/models/subscription_charge_response.rb +20 -0
- data/lib/dodopayments/models/subscription_create_params.rb +262 -8
- data/lib/dodopayments/models/subscription_create_response.rb +6 -5
- data/lib/dodopayments/models/subscription_list_params.rb +5 -4
- data/lib/dodopayments/models/subscription_retrieve_params.rb +5 -4
- data/lib/dodopayments/models/subscription_status.rb +7 -2
- data/lib/dodopayments/models/subscription_update_params.rb +19 -6
- data/lib/dodopayments/models/time_interval.rb +7 -2
- data/lib/dodopayments/models/webhook_event.rb +3 -2
- data/lib/dodopayments/models/webhook_event_list_params.rb +6 -5
- data/lib/dodopayments/models/webhook_event_retrieve_params.rb +5 -4
- data/lib/dodopayments/request_options.rb +12 -47
- data/lib/dodopayments/resources/customers/customer_portal.rb +10 -8
- data/lib/dodopayments/resources/customers.rb +30 -29
- data/lib/dodopayments/resources/discounts.rb +45 -69
- data/lib/dodopayments/resources/disputes.rb +20 -22
- data/lib/dodopayments/resources/invoices/payments.rb +8 -5
- data/lib/dodopayments/resources/invoices.rb +2 -0
- data/lib/dodopayments/resources/license_key_instances.rb +23 -21
- data/lib/dodopayments/resources/license_keys.rb +27 -32
- data/lib/dodopayments/resources/licenses.rb +20 -18
- data/lib/dodopayments/resources/misc.rb +7 -3
- data/lib/dodopayments/resources/payments.rb +36 -43
- data/lib/dodopayments/resources/payouts.rb +9 -7
- data/lib/dodopayments/resources/products/images.rb +9 -7
- data/lib/dodopayments/resources/products.rb +59 -87
- data/lib/dodopayments/resources/refunds.rb +25 -29
- data/lib/dodopayments/resources/subscriptions.rb +68 -54
- data/lib/dodopayments/resources/webhook_events.rb +20 -21
- data/lib/dodopayments/version.rb +1 -1
- data/lib/dodopayments.rb +34 -7
- data/manifest.yaml +1 -0
- data/rbi/lib/dodopayments/client.rbi +32 -47
- data/rbi/lib/dodopayments/errors.rbi +125 -161
- data/rbi/lib/dodopayments/internal/default_page_number_pagination.rbi +18 -0
- data/rbi/lib/dodopayments/internal/transport/base_client.rbi +199 -0
- data/rbi/lib/dodopayments/internal/transport/pooled_net_requester.rbi +60 -0
- data/rbi/lib/dodopayments/internal/type/array_of.rbi +85 -0
- data/rbi/lib/dodopayments/internal/type/base_model.rbi +214 -0
- data/rbi/lib/dodopayments/internal/type/base_page.rbi +36 -0
- data/rbi/lib/dodopayments/internal/type/boolean.rbi +48 -0
- data/rbi/lib/dodopayments/internal/type/converter.rbi +120 -0
- data/rbi/lib/dodopayments/internal/type/enum.rbi +69 -0
- data/rbi/lib/dodopayments/internal/type/hash_of.rbi +85 -0
- data/rbi/lib/dodopayments/internal/type/io_like.rbi +46 -0
- data/rbi/lib/dodopayments/internal/type/request_parameters.rbi +21 -0
- data/rbi/lib/dodopayments/internal/type/union.rbi +77 -0
- data/rbi/lib/dodopayments/internal/type/unknown.rbi +40 -0
- data/rbi/lib/dodopayments/internal/util.rbi +297 -0
- data/rbi/lib/dodopayments/internal.rbi +12 -0
- data/rbi/lib/dodopayments/models/attach_existing_customer.rbi +4 -11
- data/rbi/lib/dodopayments/models/billing_address.rbi +20 -38
- data/rbi/lib/dodopayments/models/country_code.rbi +256 -256
- data/rbi/lib/dodopayments/models/create_new_customer.rbi +11 -30
- data/rbi/lib/dodopayments/models/customer.rbi +9 -41
- data/rbi/lib/dodopayments/models/customer_create_params.rbi +9 -26
- data/rbi/lib/dodopayments/models/customer_limited_details.rbi +6 -23
- data/rbi/lib/dodopayments/models/customer_list_params.rbi +8 -20
- data/rbi/lib/dodopayments/models/customer_portal_session.rbi +4 -11
- data/rbi/lib/dodopayments/models/customer_request.rbi +4 -7
- data/rbi/lib/dodopayments/models/customer_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/customer_update_params.rbi +8 -20
- data/rbi/lib/dodopayments/models/customers/customer_portal_create_params.rbi +7 -14
- data/rbi/lib/dodopayments/models/discount.rbi +20 -78
- data/rbi/lib/dodopayments/models/discount_create_params.rbi +23 -61
- data/rbi/lib/dodopayments/models/discount_delete_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/discount_list_params.rbi +8 -20
- data/rbi/lib/dodopayments/models/discount_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/discount_type.rbi +8 -8
- data/rbi/lib/dodopayments/models/discount_update_params.rbi +21 -59
- data/rbi/lib/dodopayments/models/dispute.rbi +27 -59
- data/rbi/lib/dodopayments/models/dispute_list_params.rbi +19 -57
- data/rbi/lib/dodopayments/models/dispute_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/dispute_stage.rbi +10 -10
- data/rbi/lib/dodopayments/models/dispute_status.rbi +14 -14
- data/rbi/lib/dodopayments/models/intent_status.rbi +22 -18
- data/rbi/lib/dodopayments/models/invoices/payment_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/license_activate_params.rbi +8 -20
- data/rbi/lib/dodopayments/models/license_deactivate_params.rbi +8 -20
- data/rbi/lib/dodopayments/models/license_key.rbi +19 -82
- data/rbi/lib/dodopayments/models/license_key_duration.rbi +8 -20
- data/rbi/lib/dodopayments/models/license_key_instance.rbi +8 -35
- data/rbi/lib/dodopayments/models/license_key_instance_list_params.rbi +9 -26
- data/rbi/lib/dodopayments/models/license_key_instance_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/license_key_instance_update_params.rbi +7 -17
- data/rbi/lib/dodopayments/models/license_key_list_params.rbi +21 -40
- data/rbi/lib/dodopayments/models/license_key_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/license_key_status.rbi +10 -10
- data/rbi/lib/dodopayments/models/license_key_update_params.rbi +12 -29
- data/rbi/lib/dodopayments/models/license_validate_params.rbi +8 -20
- data/rbi/lib/dodopayments/models/license_validate_response.rbi +4 -11
- data/rbi/lib/dodopayments/models/misc_list_supported_countries_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/misc_list_supported_countries_response.rbi +5 -1
- data/rbi/lib/dodopayments/models/one_time_product_cart_item.rbi +8 -24
- data/rbi/lib/dodopayments/models/payment.rbi +197 -308
- data/rbi/lib/dodopayments/models/payment_create_params.rbi +261 -61
- data/rbi/lib/dodopayments/models/payment_create_response.rbi +16 -60
- data/rbi/lib/dodopayments/models/payment_list_params.rbi +16 -54
- data/rbi/lib/dodopayments/models/payment_list_response.rbi +178 -228
- data/rbi/lib/dodopayments/models/payment_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/payout_list_params.rbi +8 -20
- data/rbi/lib/dodopayments/models/payout_list_response.rbi +197 -271
- data/rbi/lib/dodopayments/models/price.rbi +368 -464
- data/rbi/lib/dodopayments/models/product.rbi +48 -119
- data/rbi/lib/dodopayments/models/product_create_params.rbi +46 -86
- data/rbi/lib/dodopayments/models/product_delete_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/product_list_params.rbi +15 -34
- data/rbi/lib/dodopayments/models/product_list_response.rbi +209 -275
- data/rbi/lib/dodopayments/models/product_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/product_unarchive_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/product_update_params.rbi +55 -102
- data/rbi/lib/dodopayments/models/products/image_update_params.rbi +7 -14
- data/rbi/lib/dodopayments/models/products/image_update_response.rbi +5 -17
- data/rbi/lib/dodopayments/models/refund.rbi +181 -213
- data/rbi/lib/dodopayments/models/refund_create_params.rbi +13 -39
- data/rbi/lib/dodopayments/models/refund_list_params.rbi +15 -48
- data/rbi/lib/dodopayments/models/refund_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/refund_status.rbi +11 -11
- data/rbi/lib/dodopayments/models/subscription.rbi +202 -283
- data/rbi/lib/dodopayments/models/subscription_charge_params.rbi +27 -0
- data/rbi/lib/dodopayments/models/subscription_charge_response.rbi +16 -0
- data/rbi/lib/dodopayments/models/subscription_create_params.rbi +315 -69
- data/rbi/lib/dodopayments/models/subscription_create_response.rbi +15 -51
- data/rbi/lib/dodopayments/models/subscription_list_params.rbi +15 -48
- data/rbi/lib/dodopayments/models/subscription_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/models/subscription_status.rbi +14 -14
- data/rbi/lib/dodopayments/models/subscription_update_params.rbi +25 -21
- data/rbi/lib/dodopayments/models/time_interval.rbi +11 -11
- data/rbi/lib/dodopayments/models/webhook_event.rbi +11 -54
- data/rbi/lib/dodopayments/models/webhook_event_list_params.rbi +12 -45
- data/rbi/lib/dodopayments/models/webhook_event_retrieve_params.rbi +6 -8
- data/rbi/lib/dodopayments/request_options.rbi +18 -81
- data/rbi/lib/dodopayments/resources/customers/customer_portal.rbi +5 -7
- data/rbi/lib/dodopayments/resources/customers.rbi +12 -20
- data/rbi/lib/dodopayments/resources/discounts.rbi +27 -37
- data/rbi/lib/dodopayments/resources/disputes.rbi +9 -13
- data/rbi/lib/dodopayments/resources/invoices/payments.rbi +4 -5
- data/rbi/lib/dodopayments/resources/invoices.rbi +3 -4
- data/rbi/lib/dodopayments/resources/license_key_instances.rbi +9 -15
- data/rbi/lib/dodopayments/resources/license_keys.rbi +13 -19
- data/rbi/lib/dodopayments/resources/licenses.rbi +8 -11
- data/rbi/lib/dodopayments/resources/misc.rbi +12 -6
- data/rbi/lib/dodopayments/resources/payments.rbi +32 -21
- data/rbi/lib/dodopayments/resources/payouts.rbi +5 -7
- data/rbi/lib/dodopayments/resources/products/images.rbi +4 -6
- data/rbi/lib/dodopayments/resources/products.rbi +43 -44
- data/rbi/lib/dodopayments/resources/refunds.rbi +10 -20
- data/rbi/lib/dodopayments/resources/subscriptions.rbi +57 -24
- data/rbi/lib/dodopayments/resources/webhook_events.rbi +7 -10
- data/rbi/lib/dodopayments/version.rbi +1 -1
- data/sig/dodopayments/client.rbs +8 -8
- data/sig/dodopayments/errors.rbs +98 -96
- data/sig/dodopayments/internal/default_page_number_pagination.rbs +11 -0
- data/sig/dodopayments/internal/transport/base_client.rbs +110 -0
- data/sig/dodopayments/internal/transport/pooled_net_requester.rbs +41 -0
- data/sig/dodopayments/internal/type/array_of.rbs +43 -0
- data/sig/dodopayments/internal/type/base_model.rbs +92 -0
- data/sig/dodopayments/internal/type/base_page.rbs +24 -0
- data/sig/dodopayments/internal/type/boolean.rbs +23 -0
- data/sig/dodopayments/internal/type/converter.rbs +54 -0
- data/sig/dodopayments/internal/type/enum.rbs +29 -0
- data/sig/dodopayments/internal/type/hash_of.rbs +43 -0
- data/sig/dodopayments/internal/type/io_like.rbs +23 -0
- data/sig/dodopayments/internal/type/request_parameters.rbs +15 -0
- data/sig/dodopayments/internal/type/union.rbs +47 -0
- data/sig/dodopayments/internal/type/unknown.rbs +23 -0
- data/sig/dodopayments/internal/util.rbs +156 -0
- data/sig/dodopayments/internal.rbs +5 -0
- data/sig/dodopayments/models/attach_existing_customer.rbs +2 -7
- data/sig/dodopayments/models/billing_address.rbs +8 -12
- data/sig/dodopayments/models/country_code.rbs +4 -2
- data/sig/dodopayments/models/create_new_customer.rbs +7 -12
- data/sig/dodopayments/models/customer.rbs +9 -13
- data/sig/dodopayments/models/customer_create_params.rbs +10 -15
- data/sig/dodopayments/models/customer_limited_details.rbs +2 -7
- data/sig/dodopayments/models/customer_list_params.rbs +9 -14
- data/sig/dodopayments/models/customer_portal_session.rbs +2 -7
- data/sig/dodopayments/models/customer_request.rbs +4 -2
- data/sig/dodopayments/models/customer_retrieve_params.rbs +6 -10
- data/sig/dodopayments/models/customer_update_params.rbs +9 -14
- data/sig/dodopayments/models/customers/customer_portal_create_params.rbs +8 -13
- data/sig/dodopayments/models/discount.rbs +14 -18
- data/sig/dodopayments/models/discount_create_params.rbs +14 -19
- data/sig/dodopayments/models/discount_delete_params.rbs +6 -10
- data/sig/dodopayments/models/discount_list_params.rbs +9 -14
- data/sig/dodopayments/models/discount_retrieve_params.rbs +6 -10
- data/sig/dodopayments/models/discount_type.rbs +4 -2
- data/sig/dodopayments/models/discount_update_params.rbs +14 -19
- data/sig/dodopayments/models/dispute.rbs +11 -15
- data/sig/dodopayments/models/dispute_list_params.rbs +14 -19
- data/sig/dodopayments/models/dispute_retrieve_params.rbs +6 -10
- data/sig/dodopayments/models/dispute_stage.rbs +4 -2
- data/sig/dodopayments/models/dispute_status.rbs +4 -2
- data/sig/dodopayments/models/intent_status.rbs +4 -2
- data/sig/dodopayments/models/invoices/payment_retrieve_params.rbs +6 -10
- data/sig/dodopayments/models/license_activate_params.rbs +10 -14
- data/sig/dodopayments/models/license_deactivate_params.rbs +9 -14
- data/sig/dodopayments/models/license_key.rbs +15 -19
- data/sig/dodopayments/models/license_key_duration.rbs +5 -7
- data/sig/dodopayments/models/license_key_instance.rbs +8 -13
- data/sig/dodopayments/models/license_key_instance_list_params.rbs +10 -15
- data/sig/dodopayments/models/license_key_instance_retrieve_params.rbs +5 -10
- data/sig/dodopayments/models/license_key_instance_update_params.rbs +8 -10
- data/sig/dodopayments/models/license_key_list_params.rbs +12 -17
- data/sig/dodopayments/models/license_key_retrieve_params.rbs +6 -10
- data/sig/dodopayments/models/license_key_status.rbs +4 -2
- data/sig/dodopayments/models/license_key_update_params.rbs +10 -15
- data/sig/dodopayments/models/license_validate_params.rbs +9 -14
- data/sig/dodopayments/models/license_validate_response.rbs +2 -7
- data/sig/dodopayments/models/misc_list_supported_countries_params.rbs +5 -10
- data/sig/dodopayments/models/one_time_product_cart_item.rbs +6 -7
- data/sig/dodopayments/models/payment.rbs +28 -35
- data/sig/dodopayments/models/payment_create_params.rbs +373 -20
- data/sig/dodopayments/models/payment_create_response.rbs +11 -16
- data/sig/dodopayments/models/payment_list_params.rbs +14 -19
- data/sig/dodopayments/models/payment_list_response.rbs +17 -20
- data/sig/dodopayments/models/payment_retrieve_params.rbs +6 -10
- data/sig/dodopayments/models/payout_list_params.rbs +9 -14
- data/sig/dodopayments/models/payout_list_response.rbs +30 -28
- data/sig/dodopayments/models/price.rbs +37 -41
- data/sig/dodopayments/models/product.rbs +22 -24
- data/sig/dodopayments/models/product_create_params.rbs +20 -23
- data/sig/dodopayments/models/product_delete_params.rbs +6 -10
- data/sig/dodopayments/models/product_list_params.rbs +11 -16
- data/sig/dodopayments/models/product_list_response.rbs +24 -25
- data/sig/dodopayments/models/product_retrieve_params.rbs +6 -10
- data/sig/dodopayments/models/product_unarchive_params.rbs +6 -10
- data/sig/dodopayments/models/product_update_params.rbs +21 -24
- data/sig/dodopayments/models/products/image_update_params.rbs +9 -13
- data/sig/dodopayments/models/products/image_update_response.rbs +2 -7
- data/sig/dodopayments/models/refund.rbs +15 -15
- data/sig/dodopayments/models/refund_create_params.rbs +10 -18
- data/sig/dodopayments/models/refund_list_params.rbs +13 -18
- data/sig/dodopayments/models/refund_retrieve_params.rbs +6 -10
- data/sig/dodopayments/models/refund_status.rbs +4 -2
- data/sig/dodopayments/models/subscription.rbs +29 -27
- data/sig/dodopayments/models/subscription_charge_params.rbs +21 -0
- data/sig/dodopayments/models/subscription_charge_response.rbs +13 -0
- data/sig/dodopayments/models/subscription_create_params.rbs +391 -22
- data/sig/dodopayments/models/subscription_create_response.rbs +10 -15
- data/sig/dodopayments/models/subscription_list_params.rbs +13 -18
- data/sig/dodopayments/models/subscription_retrieve_params.rbs +6 -10
- data/sig/dodopayments/models/subscription_status.rbs +4 -2
- data/sig/dodopayments/models/subscription_update_params.rbs +18 -15
- data/sig/dodopayments/models/time_interval.rbs +4 -2
- data/sig/dodopayments/models/webhook_event.rbs +11 -15
- data/sig/dodopayments/models/webhook_event_list_params.rbs +13 -18
- data/sig/dodopayments/models/webhook_event_retrieve_params.rbs +6 -10
- data/sig/dodopayments/request_options.rbs +3 -13
- data/sig/dodopayments/resources/customers/customer_portal.rbs +5 -11
- data/sig/dodopayments/resources/customers.rbs +21 -42
- data/sig/dodopayments/resources/discounts.rbs +34 -61
- data/sig/dodopayments/resources/disputes.rbs +14 -24
- data/sig/dodopayments/resources/invoices/payments.rbs +4 -10
- data/sig/dodopayments/resources/license_key_instances.rbs +15 -32
- data/sig/dodopayments/resources/license_keys.rbs +19 -36
- data/sig/dodopayments/resources/licenses.rbs +15 -30
- data/sig/dodopayments/resources/misc.rbs +3 -8
- data/sig/dodopayments/resources/payments.rbs +28 -39
- data/sig/dodopayments/resources/payouts.rbs +5 -9
- data/sig/dodopayments/resources/products/images.rbs +5 -11
- data/sig/dodopayments/resources/products.rbs +45 -71
- data/sig/dodopayments/resources/refunds.rbs +18 -33
- data/sig/dodopayments/resources/subscriptions.rbs +44 -54
- data/sig/dodopayments/resources/webhook_events.rbs +13 -24
- data/sig/dodopayments/version.rbs +1 -1
- metadata +63 -27
- data/lib/dodopayments/base_client.rb +0 -453
- data/lib/dodopayments/base_model.rb +0 -1217
- data/lib/dodopayments/base_page.rb +0 -62
- data/lib/dodopayments/default_page_number_pagination.rb +0 -97
- data/lib/dodopayments/extern.rb +0 -9
- data/lib/dodopayments/pooled_net_requester.rb +0 -164
- data/lib/dodopayments/util.rb +0 -717
- data/rbi/lib/dodopayments/base_client.rbi +0 -186
- data/rbi/lib/dodopayments/base_model.rbi +0 -606
- data/rbi/lib/dodopayments/base_page.rbi +0 -40
- data/rbi/lib/dodopayments/default_page_number_pagination.rbi +0 -17
- data/rbi/lib/dodopayments/extern.rbi +0 -8
- data/rbi/lib/dodopayments/pooled_net_requester.rbi +0 -47
- data/rbi/lib/dodopayments/util.rbi +0 -270
- data/sig/dodopayments/base_client.rbs +0 -103
- data/sig/dodopayments/base_model.rbs +0 -246
- data/sig/dodopayments/base_page.rbs +0 -20
- data/sig/dodopayments/default_page_number_pagination.rbs +0 -7
- data/sig/dodopayments/extern.rbs +0 -4
- data/sig/dodopayments/pooled_net_requester.rbs +0 -30
- data/sig/dodopayments/util.rbs +0 -136
@@ -1,1217 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dodopayments
|
4
|
-
# @api private
|
5
|
-
#
|
6
|
-
# @abstract
|
7
|
-
module Converter
|
8
|
-
# rubocop:disable Lint/UnusedMethodArgument
|
9
|
-
|
10
|
-
# @api private
|
11
|
-
#
|
12
|
-
# @param value [Object]
|
13
|
-
#
|
14
|
-
# @return [Object]
|
15
|
-
def coerce(value) = value
|
16
|
-
|
17
|
-
# @api private
|
18
|
-
#
|
19
|
-
# @param value [Object]
|
20
|
-
#
|
21
|
-
# @return [Object]
|
22
|
-
def dump(value) = value
|
23
|
-
|
24
|
-
# @api private
|
25
|
-
#
|
26
|
-
# @param value [Object]
|
27
|
-
#
|
28
|
-
# @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
|
29
|
-
def try_strict_coerce(value) = (raise NotImplementedError)
|
30
|
-
|
31
|
-
# rubocop:enable Lint/UnusedMethodArgument
|
32
|
-
|
33
|
-
class << self
|
34
|
-
# @api private
|
35
|
-
#
|
36
|
-
# @param spec [Hash{Symbol=>Object}, Proc, Dodopayments::Converter, Class] .
|
37
|
-
#
|
38
|
-
# @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
|
39
|
-
#
|
40
|
-
# @option spec [Proc] :enum
|
41
|
-
#
|
42
|
-
# @option spec [Proc] :union
|
43
|
-
#
|
44
|
-
# @option spec [Boolean] :"nil?"
|
45
|
-
#
|
46
|
-
# @return [Proc]
|
47
|
-
def type_info(spec)
|
48
|
-
case spec
|
49
|
-
in Hash
|
50
|
-
type_info(spec.slice(:const, :enum, :union).first&.last)
|
51
|
-
in Proc
|
52
|
-
spec
|
53
|
-
in Dodopayments::Converter | Class | Symbol
|
54
|
-
-> { spec }
|
55
|
-
in true | false
|
56
|
-
-> { Dodopayments::BooleanModel }
|
57
|
-
in NilClass | Integer | Float
|
58
|
-
-> { spec.class }
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# @api private
|
63
|
-
#
|
64
|
-
# Based on `target`, transform `value` into `target`, to the extent possible:
|
65
|
-
#
|
66
|
-
# 1. if the given `value` conforms to `target` already, return the given `value`
|
67
|
-
# 2. if it's possible and safe to convert the given `value` to `target`, then the
|
68
|
-
# converted value
|
69
|
-
# 3. otherwise, the given `value` unaltered
|
70
|
-
#
|
71
|
-
# @param target [Dodopayments::Converter, Class]
|
72
|
-
# @param value [Object]
|
73
|
-
#
|
74
|
-
# @return [Object]
|
75
|
-
def coerce(target, value)
|
76
|
-
case target
|
77
|
-
in Dodopayments::Converter
|
78
|
-
target.coerce(value)
|
79
|
-
in Symbol
|
80
|
-
case value
|
81
|
-
in Symbol | String if (val = value.to_sym) == target
|
82
|
-
val
|
83
|
-
else
|
84
|
-
value
|
85
|
-
end
|
86
|
-
in Class
|
87
|
-
case target
|
88
|
-
in -> { _1 <= NilClass }
|
89
|
-
nil
|
90
|
-
in -> { _1 <= Integer }
|
91
|
-
value.is_a?(Numeric) ? Integer(value) : value
|
92
|
-
in -> { _1 <= Float }
|
93
|
-
value.is_a?(Numeric) ? Float(value) : value
|
94
|
-
in -> { _1 <= Symbol }
|
95
|
-
value.is_a?(String) ? value.to_sym : value
|
96
|
-
in -> { _1 <= String }
|
97
|
-
value.is_a?(Symbol) ? value.to_s : value
|
98
|
-
in -> { _1 <= Date || _1 <= Time }
|
99
|
-
value.is_a?(String) ? target.parse(value) : value
|
100
|
-
in -> { _1 <= IO }
|
101
|
-
value.is_a?(String) ? StringIO.new(value) : value
|
102
|
-
else
|
103
|
-
value
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
# @api private
|
109
|
-
#
|
110
|
-
# @param target [Dodopayments::Converter, Class]
|
111
|
-
# @param value [Object]
|
112
|
-
#
|
113
|
-
# @return [Object]
|
114
|
-
def dump(target, value)
|
115
|
-
case target
|
116
|
-
in Dodopayments::Converter
|
117
|
-
target.dump(value)
|
118
|
-
else
|
119
|
-
value
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
# @api private
|
124
|
-
#
|
125
|
-
# The underlying algorithm for computing maximal compatibility is subject to
|
126
|
-
# future improvements.
|
127
|
-
#
|
128
|
-
# Similar to `#.coerce`, used to determine the best union variant to decode into.
|
129
|
-
#
|
130
|
-
# 1. determine if strict-ish coercion is possible
|
131
|
-
# 2. return either result of successful coercion or if loose coercion is possible
|
132
|
-
# 3. return a score for recursively tallied count for fields that can be coerced
|
133
|
-
#
|
134
|
-
# @param target [Dodopayments::Converter, Class]
|
135
|
-
# @param value [Object]
|
136
|
-
#
|
137
|
-
# @return [Object]
|
138
|
-
def try_strict_coerce(target, value)
|
139
|
-
case target
|
140
|
-
in Dodopayments::Converter
|
141
|
-
target.try_strict_coerce(value)
|
142
|
-
in Symbol
|
143
|
-
case value
|
144
|
-
in Symbol | String if (val = value.to_sym) == target
|
145
|
-
[true, val, 1]
|
146
|
-
else
|
147
|
-
[false, false, 0]
|
148
|
-
end
|
149
|
-
in Class
|
150
|
-
case [target, value]
|
151
|
-
in [-> { _1 <= NilClass }, _]
|
152
|
-
[true, nil, value.nil? ? 1 : 0]
|
153
|
-
in [-> { _1 <= Integer }, Numeric]
|
154
|
-
[true, Integer(value), 1]
|
155
|
-
in [-> { _1 <= Float }, Numeric]
|
156
|
-
[true, Float(value), 1]
|
157
|
-
in [-> { _1 <= Symbol }, String]
|
158
|
-
[true, value.to_sym, 1]
|
159
|
-
in [-> { _1 <= String }, Symbol]
|
160
|
-
[true, value.to_s, 1]
|
161
|
-
in [-> { _1 <= Date || _1 <= Time }, String]
|
162
|
-
Kernel.then do
|
163
|
-
[true, target.parse(value), 1]
|
164
|
-
rescue ArgumentError
|
165
|
-
[false, false, 0]
|
166
|
-
end
|
167
|
-
in [_, ^target]
|
168
|
-
[true, value, 1]
|
169
|
-
else
|
170
|
-
[false, false, 0]
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
# @api private
|
178
|
-
#
|
179
|
-
# @abstract
|
180
|
-
#
|
181
|
-
# When we don't know what to expect for the value.
|
182
|
-
class Unknown
|
183
|
-
extend Dodopayments::Converter
|
184
|
-
|
185
|
-
# rubocop:disable Lint/UnusedMethodArgument
|
186
|
-
|
187
|
-
private_class_method :new
|
188
|
-
|
189
|
-
# @param other [Object]
|
190
|
-
#
|
191
|
-
# @return [Boolean]
|
192
|
-
def self.===(other) = true
|
193
|
-
|
194
|
-
# @param other [Object]
|
195
|
-
#
|
196
|
-
# @return [Boolean]
|
197
|
-
def self.==(other) = other.is_a?(Class) && other <= Dodopayments::Unknown
|
198
|
-
|
199
|
-
class << self
|
200
|
-
# @!parse
|
201
|
-
# # @api private
|
202
|
-
# #
|
203
|
-
# # @param value [Object]
|
204
|
-
# #
|
205
|
-
# # @return [Object]
|
206
|
-
# def coerce(value) = super
|
207
|
-
|
208
|
-
# @!parse
|
209
|
-
# # @api private
|
210
|
-
# #
|
211
|
-
# # @param value [Object]
|
212
|
-
# #
|
213
|
-
# # @return [Object]
|
214
|
-
# def dump(value) = super
|
215
|
-
|
216
|
-
# @api private
|
217
|
-
#
|
218
|
-
# @param value [Object]
|
219
|
-
#
|
220
|
-
# @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
|
221
|
-
def try_strict_coerce(value)
|
222
|
-
# prevent unknown variant from being chosen during the first coercion pass
|
223
|
-
[false, true, 0]
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
# rubocop:enable Lint/UnusedMethodArgument
|
228
|
-
end
|
229
|
-
|
230
|
-
# @api private
|
231
|
-
#
|
232
|
-
# @abstract
|
233
|
-
#
|
234
|
-
# Ruby has no Boolean class; this is something for models to refer to.
|
235
|
-
class BooleanModel
|
236
|
-
extend Dodopayments::Converter
|
237
|
-
|
238
|
-
private_class_method :new
|
239
|
-
|
240
|
-
# @param other [Object]
|
241
|
-
#
|
242
|
-
# @return [Boolean]
|
243
|
-
def self.===(other) = other == true || other == false
|
244
|
-
|
245
|
-
# @param other [Object]
|
246
|
-
#
|
247
|
-
# @return [Boolean]
|
248
|
-
def self.==(other) = other.is_a?(Class) && other <= Dodopayments::BooleanModel
|
249
|
-
|
250
|
-
class << self
|
251
|
-
# @!parse
|
252
|
-
# # @api private
|
253
|
-
# #
|
254
|
-
# # @param value [Boolean, Object]
|
255
|
-
# #
|
256
|
-
# # @return [Boolean, Object]
|
257
|
-
# def coerce(value) = super
|
258
|
-
|
259
|
-
# @!parse
|
260
|
-
# # @api private
|
261
|
-
# #
|
262
|
-
# # @param value [Boolean, Object]
|
263
|
-
# #
|
264
|
-
# # @return [Boolean, Object]
|
265
|
-
# def dump(value) = super
|
266
|
-
|
267
|
-
# @api private
|
268
|
-
#
|
269
|
-
# @param value [Object]
|
270
|
-
#
|
271
|
-
# @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
|
272
|
-
def try_strict_coerce(value)
|
273
|
-
case value
|
274
|
-
in true | false
|
275
|
-
[true, value, 1]
|
276
|
-
else
|
277
|
-
[false, false, 0]
|
278
|
-
end
|
279
|
-
end
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
# @api private
|
284
|
-
#
|
285
|
-
# @abstract
|
286
|
-
#
|
287
|
-
# A value from among a specified list of options. OpenAPI enum values map to Ruby
|
288
|
-
# values in the SDK as follows:
|
289
|
-
#
|
290
|
-
# 1. boolean => true | false
|
291
|
-
# 2. integer => Integer
|
292
|
-
# 3. float => Float
|
293
|
-
# 4. string => Symbol
|
294
|
-
#
|
295
|
-
# We can therefore convert string values to Symbols, but can't convert other
|
296
|
-
# values safely.
|
297
|
-
#
|
298
|
-
# @example
|
299
|
-
# ```ruby
|
300
|
-
# # `intent_status` is a `Dodopayments::Models::IntentStatus`
|
301
|
-
# case intent_status
|
302
|
-
# when Dodopayments::Models::IntentStatus::SUCCEEDED
|
303
|
-
# # ...
|
304
|
-
# when Dodopayments::Models::IntentStatus::FAILED
|
305
|
-
# # ...
|
306
|
-
# when Dodopayments::Models::IntentStatus::CANCELLED
|
307
|
-
# # ...
|
308
|
-
# else
|
309
|
-
# puts(intent_status)
|
310
|
-
# end
|
311
|
-
# ```
|
312
|
-
#
|
313
|
-
# @example
|
314
|
-
# ```ruby
|
315
|
-
# case intent_status
|
316
|
-
# in :succeeded
|
317
|
-
# # ...
|
318
|
-
# in :failed
|
319
|
-
# # ...
|
320
|
-
# in :cancelled
|
321
|
-
# # ...
|
322
|
-
# else
|
323
|
-
# puts(intent_status)
|
324
|
-
# end
|
325
|
-
# ```
|
326
|
-
class Enum
|
327
|
-
extend Dodopayments::Converter
|
328
|
-
|
329
|
-
class << self
|
330
|
-
# All of the valid Symbol values for this enum.
|
331
|
-
#
|
332
|
-
# @return [Array<NilClass, Boolean, Integer, Float, Symbol>]
|
333
|
-
def values = (@values ||= constants.map { const_get(_1) })
|
334
|
-
|
335
|
-
# @api private
|
336
|
-
#
|
337
|
-
# Guard against thread safety issues by instantiating `@values`.
|
338
|
-
private def finalize! = values
|
339
|
-
end
|
340
|
-
|
341
|
-
private_class_method :new
|
342
|
-
|
343
|
-
# @param other [Object]
|
344
|
-
#
|
345
|
-
# @return [Boolean]
|
346
|
-
def self.===(other) = values.include?(other)
|
347
|
-
|
348
|
-
# @param other [Object]
|
349
|
-
#
|
350
|
-
# @return [Boolean]
|
351
|
-
def self.==(other)
|
352
|
-
other.is_a?(Class) && other <= Dodopayments::Enum && other.values.to_set == values.to_set
|
353
|
-
end
|
354
|
-
|
355
|
-
class << self
|
356
|
-
# @api private
|
357
|
-
#
|
358
|
-
# @param value [String, Symbol, Object]
|
359
|
-
#
|
360
|
-
# @return [Symbol, Object]
|
361
|
-
def coerce(value)
|
362
|
-
case value
|
363
|
-
in Symbol | String if values.include?(val = value.to_sym)
|
364
|
-
val
|
365
|
-
else
|
366
|
-
value
|
367
|
-
end
|
368
|
-
end
|
369
|
-
|
370
|
-
# @!parse
|
371
|
-
# # @api private
|
372
|
-
# #
|
373
|
-
# # @param value [Symbol, Object]
|
374
|
-
# #
|
375
|
-
# # @return [Symbol, Object]
|
376
|
-
# def dump(value) = super
|
377
|
-
|
378
|
-
# @api private
|
379
|
-
#
|
380
|
-
# @param value [Object]
|
381
|
-
#
|
382
|
-
# @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
|
383
|
-
def try_strict_coerce(value)
|
384
|
-
return [true, value, 1] if values.include?(value)
|
385
|
-
|
386
|
-
case value
|
387
|
-
in Symbol | String if values.include?(val = value.to_sym)
|
388
|
-
[true, val, 1]
|
389
|
-
else
|
390
|
-
case [value, values.first]
|
391
|
-
in [true | false, true | false] | [Integer, Integer] | [Symbol | String, Symbol]
|
392
|
-
[false, true, 0]
|
393
|
-
else
|
394
|
-
[false, false, 0]
|
395
|
-
end
|
396
|
-
end
|
397
|
-
end
|
398
|
-
end
|
399
|
-
end
|
400
|
-
|
401
|
-
# @api private
|
402
|
-
#
|
403
|
-
# @abstract
|
404
|
-
#
|
405
|
-
# @example
|
406
|
-
# ```ruby
|
407
|
-
# # `price` is a `Dodopayments::Models::Price`
|
408
|
-
# case price
|
409
|
-
# when Dodopayments::Models::Price::OneTimePrice
|
410
|
-
# puts(price.currency)
|
411
|
-
# when Dodopayments::Models::Price::RecurringPrice
|
412
|
-
# puts(price.discount)
|
413
|
-
# else
|
414
|
-
# puts(price)
|
415
|
-
# end
|
416
|
-
# ```
|
417
|
-
#
|
418
|
-
# @example
|
419
|
-
# ```ruby
|
420
|
-
# case price
|
421
|
-
# in {type: :one_time_price, currency: currency, discount: discount, price: price}
|
422
|
-
# puts(currency)
|
423
|
-
# in {type: :recurring_price, currency: currency, discount: discount, payment_frequency_count: payment_frequency_count}
|
424
|
-
# puts(discount)
|
425
|
-
# else
|
426
|
-
# puts(price)
|
427
|
-
# end
|
428
|
-
# ```
|
429
|
-
class Union
|
430
|
-
extend Dodopayments::Converter
|
431
|
-
|
432
|
-
class << self
|
433
|
-
# @api private
|
434
|
-
#
|
435
|
-
# All of the specified variant info for this union.
|
436
|
-
#
|
437
|
-
# @return [Array<Array(Symbol, Proc)>]
|
438
|
-
private def known_variants = (@known_variants ||= [])
|
439
|
-
|
440
|
-
# @api private
|
441
|
-
#
|
442
|
-
# @return [Array<Array(Symbol, Object)>]
|
443
|
-
protected def derefed_variants
|
444
|
-
@known_variants.map { |key, variant_fn| [key, variant_fn.call] }
|
445
|
-
end
|
446
|
-
|
447
|
-
# All of the specified variants for this union.
|
448
|
-
#
|
449
|
-
# @return [Array<Object>]
|
450
|
-
def variants
|
451
|
-
derefed_variants.map(&:last)
|
452
|
-
end
|
453
|
-
|
454
|
-
# @api private
|
455
|
-
#
|
456
|
-
# @param property [Symbol]
|
457
|
-
private def discriminator(property)
|
458
|
-
case property
|
459
|
-
in Symbol
|
460
|
-
@discriminator = property
|
461
|
-
end
|
462
|
-
end
|
463
|
-
|
464
|
-
# @api private
|
465
|
-
#
|
466
|
-
# @param key [Symbol, Hash{Symbol=>Object}, Proc, Dodopayments::Converter, Class]
|
467
|
-
#
|
468
|
-
# @param spec [Hash{Symbol=>Object}, Proc, Dodopayments::Converter, Class] .
|
469
|
-
#
|
470
|
-
# @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
|
471
|
-
#
|
472
|
-
# @option spec [Proc] :enum
|
473
|
-
#
|
474
|
-
# @option spec [Proc] :union
|
475
|
-
#
|
476
|
-
# @option spec [Boolean] :"nil?"
|
477
|
-
private def variant(key, spec = nil)
|
478
|
-
variant_info =
|
479
|
-
case key
|
480
|
-
in Symbol
|
481
|
-
[key, Dodopayments::Converter.type_info(spec)]
|
482
|
-
in Proc | Dodopayments::Converter | Class | Hash
|
483
|
-
[nil, Dodopayments::Converter.type_info(key)]
|
484
|
-
end
|
485
|
-
|
486
|
-
known_variants << variant_info
|
487
|
-
end
|
488
|
-
|
489
|
-
# @api private
|
490
|
-
#
|
491
|
-
# @param value [Object]
|
492
|
-
#
|
493
|
-
# @return [Dodopayments::Converter, Class, nil]
|
494
|
-
private def resolve_variant(value)
|
495
|
-
case [@discriminator, value]
|
496
|
-
in [_, Dodopayments::BaseModel]
|
497
|
-
value.class
|
498
|
-
in [Symbol, Hash]
|
499
|
-
key =
|
500
|
-
if value.key?(@discriminator)
|
501
|
-
value.fetch(@discriminator)
|
502
|
-
elsif value.key?((discriminator = @discriminator.to_s))
|
503
|
-
value.fetch(discriminator)
|
504
|
-
end
|
505
|
-
|
506
|
-
key = key.to_sym if key.is_a?(String)
|
507
|
-
_, resolved = known_variants.find { |k,| k == key }
|
508
|
-
resolved.nil? ? Dodopayments::Unknown : resolved.call
|
509
|
-
else
|
510
|
-
nil
|
511
|
-
end
|
512
|
-
end
|
513
|
-
end
|
514
|
-
|
515
|
-
# rubocop:disable Style/HashEachMethods
|
516
|
-
# rubocop:disable Style/CaseEquality
|
517
|
-
|
518
|
-
private_class_method :new
|
519
|
-
|
520
|
-
# @param other [Object]
|
521
|
-
#
|
522
|
-
# @return [Boolean]
|
523
|
-
def self.===(other)
|
524
|
-
known_variants.any? do |_, variant_fn|
|
525
|
-
variant_fn.call === other
|
526
|
-
end
|
527
|
-
end
|
528
|
-
|
529
|
-
# @param other [Object]
|
530
|
-
#
|
531
|
-
# @return [Boolean]
|
532
|
-
def self.==(other)
|
533
|
-
other.is_a?(Class) && other <= Dodopayments::Union && other.derefed_variants == derefed_variants
|
534
|
-
end
|
535
|
-
|
536
|
-
class << self
|
537
|
-
# @api private
|
538
|
-
#
|
539
|
-
# @param value [Object]
|
540
|
-
#
|
541
|
-
# @return [Object]
|
542
|
-
def coerce(value)
|
543
|
-
if (variant = resolve_variant(value))
|
544
|
-
return Dodopayments::Converter.coerce(variant, value)
|
545
|
-
end
|
546
|
-
|
547
|
-
matches = []
|
548
|
-
|
549
|
-
known_variants.each do |_, variant_fn|
|
550
|
-
variant = variant_fn.call
|
551
|
-
|
552
|
-
case Dodopayments::Converter.try_strict_coerce(variant, value)
|
553
|
-
in [true, coerced, _]
|
554
|
-
return coerced
|
555
|
-
in [false, true, score]
|
556
|
-
matches << [score, variant]
|
557
|
-
in [false, false, _]
|
558
|
-
nil
|
559
|
-
end
|
560
|
-
end
|
561
|
-
|
562
|
-
_, variant = matches.sort! { _2.first <=> _1.first }.find { |score,| !score.zero? }
|
563
|
-
variant.nil? ? value : Dodopayments::Converter.coerce(variant, value)
|
564
|
-
end
|
565
|
-
|
566
|
-
# @api private
|
567
|
-
#
|
568
|
-
# @param value [Object]
|
569
|
-
#
|
570
|
-
# @return [Object]
|
571
|
-
def dump(value)
|
572
|
-
if (variant = resolve_variant(value))
|
573
|
-
return Dodopayments::Converter.dump(variant, value)
|
574
|
-
end
|
575
|
-
|
576
|
-
known_variants.each do |_, variant_fn|
|
577
|
-
variant = variant_fn.call
|
578
|
-
if variant === value
|
579
|
-
return Dodopayments::Converter.dump(variant, value)
|
580
|
-
end
|
581
|
-
end
|
582
|
-
value
|
583
|
-
end
|
584
|
-
|
585
|
-
# @api private
|
586
|
-
#
|
587
|
-
# @param value [Object]
|
588
|
-
#
|
589
|
-
# @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
|
590
|
-
def try_strict_coerce(value)
|
591
|
-
# TODO(ruby) this will result in super linear decoding behaviour for nested unions
|
592
|
-
# follow up with a decoding context that captures current strictness levels
|
593
|
-
if (variant = resolve_variant(value))
|
594
|
-
return Converter.try_strict_coerce(variant, value)
|
595
|
-
end
|
596
|
-
|
597
|
-
coercible = false
|
598
|
-
max_score = 0
|
599
|
-
|
600
|
-
known_variants.each do |_, variant_fn|
|
601
|
-
variant = variant_fn.call
|
602
|
-
|
603
|
-
case Dodopayments::Converter.try_strict_coerce(variant, value)
|
604
|
-
in [true, coerced, score]
|
605
|
-
return [true, coerced, score]
|
606
|
-
in [false, true, score]
|
607
|
-
coercible = true
|
608
|
-
max_score = [max_score, score].max
|
609
|
-
in [false, false, _]
|
610
|
-
nil
|
611
|
-
end
|
612
|
-
end
|
613
|
-
|
614
|
-
[false, coercible, max_score]
|
615
|
-
end
|
616
|
-
end
|
617
|
-
|
618
|
-
# rubocop:enable Style/CaseEquality
|
619
|
-
# rubocop:enable Style/HashEachMethods
|
620
|
-
end
|
621
|
-
|
622
|
-
# @api private
|
623
|
-
#
|
624
|
-
# @abstract
|
625
|
-
#
|
626
|
-
# Array of items of a given type.
|
627
|
-
class ArrayOf
|
628
|
-
include Dodopayments::Converter
|
629
|
-
|
630
|
-
private_class_method :new
|
631
|
-
|
632
|
-
def self.[](...) = new(...)
|
633
|
-
|
634
|
-
# @param other [Object]
|
635
|
-
#
|
636
|
-
# @return [Boolean]
|
637
|
-
def ===(other)
|
638
|
-
type = item_type
|
639
|
-
case other
|
640
|
-
in Array
|
641
|
-
# rubocop:disable Style/CaseEquality
|
642
|
-
other.all? { type === _1 }
|
643
|
-
# rubocop:enable Style/CaseEquality
|
644
|
-
else
|
645
|
-
false
|
646
|
-
end
|
647
|
-
end
|
648
|
-
|
649
|
-
# @param other [Object]
|
650
|
-
#
|
651
|
-
# @return [Boolean]
|
652
|
-
def ==(other) = other.is_a?(Dodopayments::ArrayOf) && other.item_type == item_type
|
653
|
-
|
654
|
-
# @api private
|
655
|
-
#
|
656
|
-
# @param value [Enumerable, Object]
|
657
|
-
#
|
658
|
-
# @return [Array<Object>, Object]
|
659
|
-
def coerce(value)
|
660
|
-
type = item_type
|
661
|
-
case value
|
662
|
-
in Enumerable unless value.is_a?(Hash)
|
663
|
-
value.map { Dodopayments::Converter.coerce(type, _1) }
|
664
|
-
else
|
665
|
-
value
|
666
|
-
end
|
667
|
-
end
|
668
|
-
|
669
|
-
# @api private
|
670
|
-
#
|
671
|
-
# @param value [Enumerable, Object]
|
672
|
-
#
|
673
|
-
# @return [Array<Object>, Object]
|
674
|
-
def dump(value)
|
675
|
-
type = item_type
|
676
|
-
case value
|
677
|
-
in Enumerable unless value.is_a?(Hash)
|
678
|
-
value.map { Dodopayments::Converter.dump(type, _1) }.to_a
|
679
|
-
else
|
680
|
-
value
|
681
|
-
end
|
682
|
-
end
|
683
|
-
|
684
|
-
# @api private
|
685
|
-
#
|
686
|
-
# @param value [Object]
|
687
|
-
#
|
688
|
-
# @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
|
689
|
-
def try_strict_coerce(value)
|
690
|
-
case value
|
691
|
-
in Array
|
692
|
-
type = item_type
|
693
|
-
great_success = true
|
694
|
-
tally = 0
|
695
|
-
|
696
|
-
mapped =
|
697
|
-
value.map do |item|
|
698
|
-
case Dodopayments::Converter.try_strict_coerce(type, item)
|
699
|
-
in [true, coerced, score]
|
700
|
-
tally += score
|
701
|
-
coerced
|
702
|
-
in [false, true, score]
|
703
|
-
great_success = false
|
704
|
-
tally += score
|
705
|
-
item
|
706
|
-
in [false, false, _]
|
707
|
-
great_success &&= item.nil?
|
708
|
-
item
|
709
|
-
end
|
710
|
-
end
|
711
|
-
|
712
|
-
if great_success
|
713
|
-
[true, mapped, tally]
|
714
|
-
else
|
715
|
-
[false, true, tally]
|
716
|
-
end
|
717
|
-
else
|
718
|
-
[false, false, 0]
|
719
|
-
end
|
720
|
-
end
|
721
|
-
|
722
|
-
# @api private
|
723
|
-
#
|
724
|
-
# @return [Dodopayments::Converter, Class]
|
725
|
-
protected def item_type = @item_type_fn.call
|
726
|
-
|
727
|
-
# @api private
|
728
|
-
#
|
729
|
-
# @param type_info [Hash{Symbol=>Object}, Proc, Dodopayments::Converter, Class]
|
730
|
-
#
|
731
|
-
# @param spec [Hash{Symbol=>Object}] .
|
732
|
-
#
|
733
|
-
# @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
|
734
|
-
#
|
735
|
-
# @option spec [Proc] :enum
|
736
|
-
#
|
737
|
-
# @option spec [Proc] :union
|
738
|
-
#
|
739
|
-
# @option spec [Boolean] :"nil?"
|
740
|
-
def initialize(type_info, spec = {})
|
741
|
-
@item_type_fn = Dodopayments::Converter.type_info(type_info || spec)
|
742
|
-
end
|
743
|
-
end
|
744
|
-
|
745
|
-
# @api private
|
746
|
-
#
|
747
|
-
# @abstract
|
748
|
-
#
|
749
|
-
# Hash of items of a given type.
|
750
|
-
class HashOf
|
751
|
-
include Dodopayments::Converter
|
752
|
-
|
753
|
-
private_class_method :new
|
754
|
-
|
755
|
-
def self.[](...) = new(...)
|
756
|
-
|
757
|
-
# @param other [Object]
|
758
|
-
#
|
759
|
-
# @return [Boolean]
|
760
|
-
def ===(other)
|
761
|
-
type = item_type
|
762
|
-
case other
|
763
|
-
in Hash
|
764
|
-
other.all? do |key, val|
|
765
|
-
case [key, val]
|
766
|
-
in [Symbol | String, ^type]
|
767
|
-
true
|
768
|
-
else
|
769
|
-
false
|
770
|
-
end
|
771
|
-
end
|
772
|
-
else
|
773
|
-
false
|
774
|
-
end
|
775
|
-
end
|
776
|
-
|
777
|
-
# @param other [Object]
|
778
|
-
#
|
779
|
-
# @return [Boolean]
|
780
|
-
def ==(other) = other.is_a?(Dodopayments::HashOf) && other.item_type == item_type
|
781
|
-
|
782
|
-
# @api private
|
783
|
-
#
|
784
|
-
# @param value [Hash{Object=>Object}, Object]
|
785
|
-
#
|
786
|
-
# @return [Hash{Symbol=>Object}, Object]
|
787
|
-
def coerce(value)
|
788
|
-
type = item_type
|
789
|
-
case value
|
790
|
-
in Hash
|
791
|
-
value.to_h do |key, val|
|
792
|
-
coerced = Dodopayments::Converter.coerce(type, val)
|
793
|
-
[key.is_a?(String) ? key.to_sym : key, coerced]
|
794
|
-
end
|
795
|
-
else
|
796
|
-
value
|
797
|
-
end
|
798
|
-
end
|
799
|
-
|
800
|
-
# @api private
|
801
|
-
#
|
802
|
-
# @param value [Hash{Object=>Object}, Object]
|
803
|
-
#
|
804
|
-
# @return [Hash{Symbol=>Object}, Object]
|
805
|
-
def dump(value)
|
806
|
-
type = item_type
|
807
|
-
case value
|
808
|
-
in Hash
|
809
|
-
value.transform_values do |val|
|
810
|
-
Dodopayments::Converter.dump(type, val)
|
811
|
-
end
|
812
|
-
else
|
813
|
-
value
|
814
|
-
end
|
815
|
-
end
|
816
|
-
|
817
|
-
# @api private
|
818
|
-
#
|
819
|
-
# @param value [Object]
|
820
|
-
#
|
821
|
-
# @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
|
822
|
-
def try_strict_coerce(value)
|
823
|
-
case value
|
824
|
-
in Hash
|
825
|
-
type = item_type
|
826
|
-
great_success = true
|
827
|
-
tally = 0
|
828
|
-
|
829
|
-
mapped =
|
830
|
-
value.transform_values do |val|
|
831
|
-
case Dodopayments::Converter.try_strict_coerce(type, val)
|
832
|
-
in [true, coerced, score]
|
833
|
-
tally += score
|
834
|
-
coerced
|
835
|
-
in [false, true, score]
|
836
|
-
great_success = false
|
837
|
-
tally += score
|
838
|
-
val
|
839
|
-
in [false, false, _]
|
840
|
-
great_success &&= val.nil?
|
841
|
-
val
|
842
|
-
end
|
843
|
-
end
|
844
|
-
|
845
|
-
if great_success
|
846
|
-
[true, mapped, tally]
|
847
|
-
else
|
848
|
-
[false, true, tally]
|
849
|
-
end
|
850
|
-
else
|
851
|
-
[false, false, 0]
|
852
|
-
end
|
853
|
-
end
|
854
|
-
|
855
|
-
# @api private
|
856
|
-
#
|
857
|
-
# @return [Dodopayments::Converter, Class]
|
858
|
-
protected def item_type = @item_type_fn.call
|
859
|
-
|
860
|
-
# @api private
|
861
|
-
#
|
862
|
-
# @param type_info [Hash{Symbol=>Object}, Proc, Dodopayments::Converter, Class]
|
863
|
-
#
|
864
|
-
# @param spec [Hash{Symbol=>Object}] .
|
865
|
-
#
|
866
|
-
# @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
|
867
|
-
#
|
868
|
-
# @option spec [Proc] :enum
|
869
|
-
#
|
870
|
-
# @option spec [Proc] :union
|
871
|
-
#
|
872
|
-
# @option spec [Boolean] :"nil?"
|
873
|
-
def initialize(type_info, spec = {})
|
874
|
-
@item_type_fn = Dodopayments::Converter.type_info(type_info || spec)
|
875
|
-
end
|
876
|
-
end
|
877
|
-
|
878
|
-
# @abstract
|
879
|
-
#
|
880
|
-
# @example
|
881
|
-
# ```ruby
|
882
|
-
# # `attach_existing_customer` is a `Dodopayments::Models::AttachExistingCustomer`
|
883
|
-
# attach_existing_customer => {
|
884
|
-
# customer_id: customer_id
|
885
|
-
# }
|
886
|
-
# ```
|
887
|
-
class BaseModel
|
888
|
-
extend Dodopayments::Converter
|
889
|
-
|
890
|
-
class << self
|
891
|
-
# @api private
|
892
|
-
#
|
893
|
-
# Assumes superclass fields are totally defined before fields are accessed /
|
894
|
-
# defined on subclasses.
|
895
|
-
#
|
896
|
-
# @return [Hash{Symbol=>Hash{Symbol=>Object}}]
|
897
|
-
def known_fields
|
898
|
-
@known_fields ||= (self < Dodopayments::BaseModel ? superclass.known_fields.dup : {})
|
899
|
-
end
|
900
|
-
|
901
|
-
# @api private
|
902
|
-
#
|
903
|
-
# @return [Hash{Symbol=>Hash{Symbol=>Object}}]
|
904
|
-
def fields
|
905
|
-
known_fields.transform_values do |field|
|
906
|
-
{**field.except(:type_fn), type: field.fetch(:type_fn).call}
|
907
|
-
end
|
908
|
-
end
|
909
|
-
|
910
|
-
# @api private
|
911
|
-
#
|
912
|
-
# @return [Hash{Symbol=>Proc}]
|
913
|
-
def defaults = (@defaults ||= {})
|
914
|
-
|
915
|
-
# @api private
|
916
|
-
#
|
917
|
-
# @param name_sym [Symbol]
|
918
|
-
#
|
919
|
-
# @param required [Boolean]
|
920
|
-
#
|
921
|
-
# @param type_info [Hash{Symbol=>Object}, Proc, Dodopayments::Converter, Class]
|
922
|
-
#
|
923
|
-
# @param spec [Hash{Symbol=>Object}] .
|
924
|
-
#
|
925
|
-
# @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
|
926
|
-
#
|
927
|
-
# @option spec [Proc] :enum
|
928
|
-
#
|
929
|
-
# @option spec [Proc] :union
|
930
|
-
#
|
931
|
-
# @option spec [Boolean] :"nil?"
|
932
|
-
private def add_field(name_sym, required:, type_info:, spec:)
|
933
|
-
type_fn, info =
|
934
|
-
case type_info
|
935
|
-
in Proc | Class | Dodopayments::Converter
|
936
|
-
[Dodopayments::Converter.type_info({**spec, union: type_info}), spec]
|
937
|
-
in Hash
|
938
|
-
[Dodopayments::Converter.type_info(type_info), type_info]
|
939
|
-
end
|
940
|
-
|
941
|
-
fallback = info[:const]
|
942
|
-
defaults[name_sym] = fallback if required && !info[:nil?] && info.key?(:const)
|
943
|
-
|
944
|
-
key = info.fetch(:api_name, name_sym)
|
945
|
-
setter = "#{name_sym}="
|
946
|
-
|
947
|
-
if known_fields.key?(name_sym)
|
948
|
-
[name_sym, setter].each { undef_method(_1) }
|
949
|
-
end
|
950
|
-
|
951
|
-
known_fields[name_sym] = {mode: @mode, key: key, required: required, type_fn: type_fn}
|
952
|
-
|
953
|
-
define_method(setter) do |val|
|
954
|
-
@data[key] = val
|
955
|
-
end
|
956
|
-
|
957
|
-
define_method(name_sym) do
|
958
|
-
field_type = type_fn.call
|
959
|
-
value = @data.fetch(key) { self.class.defaults[key] }
|
960
|
-
Dodopayments::Converter.coerce(field_type, value)
|
961
|
-
rescue StandardError
|
962
|
-
name = self.class.name.split("::").last
|
963
|
-
raise Dodopayments::ConversionError.new(
|
964
|
-
"Failed to parse #{name}.#{name_sym} as #{field_type.inspect}. " \
|
965
|
-
"To get the unparsed API response, use #{name}[:#{key}]."
|
966
|
-
)
|
967
|
-
end
|
968
|
-
end
|
969
|
-
|
970
|
-
# @api private
|
971
|
-
#
|
972
|
-
# @param name_sym [Symbol]
|
973
|
-
#
|
974
|
-
# @param type_info [Hash{Symbol=>Object}, Proc, Dodopayments::Converter, Class]
|
975
|
-
#
|
976
|
-
# @param spec [Hash{Symbol=>Object}] .
|
977
|
-
#
|
978
|
-
# @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
|
979
|
-
#
|
980
|
-
# @option spec [Proc] :enum
|
981
|
-
#
|
982
|
-
# @option spec [Proc] :union
|
983
|
-
#
|
984
|
-
# @option spec [Boolean] :"nil?"
|
985
|
-
def required(name_sym, type_info, spec = {})
|
986
|
-
add_field(name_sym, required: true, type_info: type_info, spec: spec)
|
987
|
-
end
|
988
|
-
|
989
|
-
# @api private
|
990
|
-
#
|
991
|
-
# @param name_sym [Symbol]
|
992
|
-
#
|
993
|
-
# @param type_info [Hash{Symbol=>Object}, Proc, Dodopayments::Converter, Class]
|
994
|
-
#
|
995
|
-
# @param spec [Hash{Symbol=>Object}] .
|
996
|
-
#
|
997
|
-
# @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
|
998
|
-
#
|
999
|
-
# @option spec [Proc] :enum
|
1000
|
-
#
|
1001
|
-
# @option spec [Proc] :union
|
1002
|
-
#
|
1003
|
-
# @option spec [Boolean] :"nil?"
|
1004
|
-
def optional(name_sym, type_info, spec = {})
|
1005
|
-
add_field(name_sym, required: false, type_info: type_info, spec: spec)
|
1006
|
-
end
|
1007
|
-
|
1008
|
-
# @api private
|
1009
|
-
#
|
1010
|
-
# `request_only` attributes not excluded from `.#coerce` when receiving responses
|
1011
|
-
# even if well behaved servers should not send them
|
1012
|
-
#
|
1013
|
-
# @param blk [Proc]
|
1014
|
-
private def request_only(&blk)
|
1015
|
-
@mode = :dump
|
1016
|
-
blk.call
|
1017
|
-
ensure
|
1018
|
-
@mode = nil
|
1019
|
-
end
|
1020
|
-
|
1021
|
-
# @api private
|
1022
|
-
#
|
1023
|
-
# `response_only` attributes are omitted from `.#dump` when making requests
|
1024
|
-
#
|
1025
|
-
# @param blk [Proc]
|
1026
|
-
private def response_only(&blk)
|
1027
|
-
@mode = :coerce
|
1028
|
-
blk.call
|
1029
|
-
ensure
|
1030
|
-
@mode = nil
|
1031
|
-
end
|
1032
|
-
end
|
1033
|
-
|
1034
|
-
# @param other [Object]
|
1035
|
-
#
|
1036
|
-
# @return [Boolean]
|
1037
|
-
def ==(other)
|
1038
|
-
case other
|
1039
|
-
in Dodopayments::BaseModel
|
1040
|
-
self.class.fields == other.class.fields && @data == other.to_h
|
1041
|
-
else
|
1042
|
-
false
|
1043
|
-
end
|
1044
|
-
end
|
1045
|
-
|
1046
|
-
class << self
|
1047
|
-
# @api private
|
1048
|
-
#
|
1049
|
-
# @param value [Dodopayments::BaseModel, Hash{Object=>Object}, Object]
|
1050
|
-
#
|
1051
|
-
# @return [Dodopayments::BaseModel, Object]
|
1052
|
-
def coerce(value)
|
1053
|
-
case Dodopayments::Util.coerce_hash(value)
|
1054
|
-
in Hash => coerced
|
1055
|
-
new(coerced)
|
1056
|
-
else
|
1057
|
-
value
|
1058
|
-
end
|
1059
|
-
end
|
1060
|
-
|
1061
|
-
# @api private
|
1062
|
-
#
|
1063
|
-
# @param value [Dodopayments::BaseModel, Object]
|
1064
|
-
#
|
1065
|
-
# @return [Hash{Object=>Object}, Object]
|
1066
|
-
def dump(value)
|
1067
|
-
unless (coerced = Dodopayments::Util.coerce_hash(value)).is_a?(Hash)
|
1068
|
-
return value
|
1069
|
-
end
|
1070
|
-
|
1071
|
-
values = coerced.filter_map do |key, val|
|
1072
|
-
name = key.to_sym
|
1073
|
-
case (field = known_fields[name])
|
1074
|
-
in nil
|
1075
|
-
[name, val]
|
1076
|
-
else
|
1077
|
-
mode, type_fn, api_name = field.fetch_values(:mode, :type_fn, :key)
|
1078
|
-
case mode
|
1079
|
-
in :coerce
|
1080
|
-
next
|
1081
|
-
else
|
1082
|
-
target = type_fn.call
|
1083
|
-
[api_name, Dodopayments::Converter.dump(target, val)]
|
1084
|
-
end
|
1085
|
-
end
|
1086
|
-
end.to_h
|
1087
|
-
|
1088
|
-
defaults.each do |key, val|
|
1089
|
-
next if values.key?(key)
|
1090
|
-
|
1091
|
-
values[key] = val
|
1092
|
-
end
|
1093
|
-
|
1094
|
-
values
|
1095
|
-
end
|
1096
|
-
|
1097
|
-
# @api private
|
1098
|
-
#
|
1099
|
-
# @param value [Object]
|
1100
|
-
#
|
1101
|
-
# @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
|
1102
|
-
def try_strict_coerce(value)
|
1103
|
-
case value
|
1104
|
-
in Hash | Dodopayments::BaseModel
|
1105
|
-
value = value.to_h
|
1106
|
-
else
|
1107
|
-
return [false, false, 0]
|
1108
|
-
end
|
1109
|
-
|
1110
|
-
keys = value.keys.to_set
|
1111
|
-
great_success = true
|
1112
|
-
tally = 0
|
1113
|
-
acc = {}
|
1114
|
-
|
1115
|
-
known_fields.each_value do |field|
|
1116
|
-
mode, required, type_fn, api_name = field.fetch_values(:mode, :required, :type_fn, :key)
|
1117
|
-
keys.delete(api_name)
|
1118
|
-
|
1119
|
-
case [required && mode != :dump, value.key?(api_name)]
|
1120
|
-
in [_, true]
|
1121
|
-
target = type_fn.call
|
1122
|
-
item = value.fetch(api_name)
|
1123
|
-
case Dodopayments::Converter.try_strict_coerce(target, item)
|
1124
|
-
in [true, coerced, score]
|
1125
|
-
tally += score
|
1126
|
-
acc[api_name] = coerced
|
1127
|
-
in [false, true, score]
|
1128
|
-
great_success = false
|
1129
|
-
tally += score
|
1130
|
-
acc[api_name] = item
|
1131
|
-
in [false, false, _]
|
1132
|
-
great_success &&= item.nil?
|
1133
|
-
end
|
1134
|
-
in [true, false]
|
1135
|
-
great_success = false
|
1136
|
-
in [false, false]
|
1137
|
-
nil
|
1138
|
-
end
|
1139
|
-
end
|
1140
|
-
|
1141
|
-
keys.each do |key|
|
1142
|
-
acc[key] = value.fetch(key)
|
1143
|
-
end
|
1144
|
-
|
1145
|
-
great_success ? [true, new(acc), tally] : [false, true, tally]
|
1146
|
-
end
|
1147
|
-
end
|
1148
|
-
|
1149
|
-
# Returns the raw value associated with the given key, if found. Otherwise, nil is
|
1150
|
-
# returned.
|
1151
|
-
#
|
1152
|
-
# It is valid to lookup keys that are not in the API spec, for example to access
|
1153
|
-
# undocumented features. This method does not parse response data into
|
1154
|
-
# higher-level types. Lookup by anything other than a Symbol is an ArgumentError.
|
1155
|
-
#
|
1156
|
-
# @param key [Symbol]
|
1157
|
-
#
|
1158
|
-
# @return [Object, nil]
|
1159
|
-
def [](key)
|
1160
|
-
unless key.instance_of?(Symbol)
|
1161
|
-
raise ArgumentError.new("Expected symbol key for lookup, got #{key.inspect}")
|
1162
|
-
end
|
1163
|
-
|
1164
|
-
@data[key]
|
1165
|
-
end
|
1166
|
-
|
1167
|
-
# Returns a Hash of the data underlying this object. O(1)
|
1168
|
-
#
|
1169
|
-
# Keys are Symbols and values are the raw values from the response. The return
|
1170
|
-
# value indicates which values were ever set on the object. i.e. there will be a
|
1171
|
-
# key in this hash if they ever were, even if the set value was nil.
|
1172
|
-
#
|
1173
|
-
# This method is not recursive. The returned value is shared by the object, so it
|
1174
|
-
# should not be mutated.
|
1175
|
-
#
|
1176
|
-
# @return [Hash{Symbol=>Object}]
|
1177
|
-
def to_h = @data
|
1178
|
-
|
1179
|
-
alias_method :to_hash, :to_h
|
1180
|
-
|
1181
|
-
# @param keys [Array<Symbol>, nil]
|
1182
|
-
#
|
1183
|
-
# @return [Hash{Symbol=>Object}]
|
1184
|
-
def deconstruct_keys(keys)
|
1185
|
-
(keys || self.class.known_fields.keys).filter_map do |k|
|
1186
|
-
unless self.class.known_fields.key?(k)
|
1187
|
-
next
|
1188
|
-
end
|
1189
|
-
|
1190
|
-
[k, method(k).call]
|
1191
|
-
end
|
1192
|
-
.to_h
|
1193
|
-
end
|
1194
|
-
|
1195
|
-
# Create a new instance of a model.
|
1196
|
-
#
|
1197
|
-
# @param data [Hash{Symbol=>Object}, Dodopayments::BaseModel]
|
1198
|
-
def initialize(data = {})
|
1199
|
-
case Dodopayments::Util.coerce_hash(data)
|
1200
|
-
in Hash => coerced
|
1201
|
-
@data = coerced.transform_keys(&:to_sym)
|
1202
|
-
else
|
1203
|
-
raise ArgumentError.new("Expected a #{Hash} or #{Dodopayments::BaseModel}, got #{data.inspect}")
|
1204
|
-
end
|
1205
|
-
end
|
1206
|
-
|
1207
|
-
# @return [String]
|
1208
|
-
def to_s = @data.to_s
|
1209
|
-
|
1210
|
-
# @return [String]
|
1211
|
-
def inspect
|
1212
|
-
"#<#{self.class.name}:0x#{object_id.to_s(16)} #{deconstruct_keys(nil).map do |k, v|
|
1213
|
-
"#{k}=#{v.inspect}"
|
1214
|
-
end.join(' ')}>"
|
1215
|
-
end
|
1216
|
-
end
|
1217
|
-
end
|