orb-billing 0.1.0.pre.alpha.38 → 0.1.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/README.md +10 -2
- data/lib/orb/client.rb +4 -0
- data/lib/orb/internal/transport/base_client.rb +2 -2
- data/lib/orb/internal/transport/pooled_net_requester.rb +15 -6
- data/lib/orb/internal/type/array_of.rb +12 -2
- data/lib/orb/internal/type/base_model.rb +23 -22
- data/lib/orb/internal/type/boolean.rb +5 -1
- data/lib/orb/internal/type/converter.rb +62 -39
- data/lib/orb/internal/type/enum.rb +13 -9
- data/lib/orb/internal/type/hash_of.rb +6 -2
- data/lib/orb/internal/type/io_like.rb +75 -0
- data/lib/orb/internal/type/request_parameters.rb +11 -2
- data/lib/orb/internal/type/union.rb +7 -3
- data/lib/orb/internal/type/unknown.rb +5 -1
- data/lib/orb/internal/util.rb +81 -26
- data/lib/orb/models/alert.rb +9 -9
- data/lib/orb/models/alert_create_for_customer_params.rb +3 -3
- data/lib/orb/models/alert_create_for_external_customer_params.rb +3 -3
- data/lib/orb/models/alert_create_for_subscription_params.rb +3 -3
- data/lib/orb/models/alert_list_params.rb +5 -5
- data/lib/orb/models/alert_update_params.rb +3 -3
- data/lib/orb/models/amount_discount.rb +1 -1
- data/lib/orb/models/billable_metric.rb +7 -7
- data/lib/orb/models/coupon.rb +7 -7
- data/lib/orb/models/coupon_create_params.rb +2 -2
- data/lib/orb/models/coupon_list_params.rb +2 -2
- data/lib/orb/models/coupons/subscription_list_params.rb +1 -1
- data/lib/orb/models/credit_note.rb +1 -1
- data/lib/orb/models/credit_note_list_params.rb +5 -5
- data/lib/orb/models/customer.rb +232 -232
- data/lib/orb/models/customer_create_params.rb +223 -223
- data/lib/orb/models/customer_list_params.rb +5 -5
- data/lib/orb/models/customer_update_by_external_id_params.rb +224 -224
- data/lib/orb/models/customer_update_params.rb +224 -224
- data/lib/orb/models/customers/balance_transaction_create_response.rb +2 -2
- data/lib/orb/models/customers/balance_transaction_list_params.rb +5 -5
- data/lib/orb/models/customers/balance_transaction_list_response.rb +2 -2
- data/lib/orb/models/customers/cost_list_by_external_id_params.rb +6 -6
- data/lib/orb/models/customers/cost_list_params.rb +6 -6
- data/lib/orb/models/customers/credit_list_by_external_id_params.rb +2 -2
- data/lib/orb/models/customers/credit_list_params.rb +2 -2
- data/lib/orb/models/customers/credits/ledger_create_entry_by_external_id_params.rb +20 -20
- data/lib/orb/models/customers/credits/ledger_create_entry_by_external_id_response.rb +22 -22
- data/lib/orb/models/customers/credits/ledger_create_entry_params.rb +20 -20
- data/lib/orb/models/customers/credits/ledger_create_entry_response.rb +22 -22
- data/lib/orb/models/customers/credits/ledger_list_by_external_id_params.rb +5 -5
- data/lib/orb/models/customers/credits/ledger_list_by_external_id_response.rb +22 -22
- data/lib/orb/models/customers/credits/ledger_list_params.rb +5 -5
- data/lib/orb/models/customers/credits/ledger_list_response.rb +22 -22
- data/lib/orb/models/customers/credits/top_up_create_by_external_id_params.rb +8 -8
- data/lib/orb/models/customers/credits/top_up_create_by_external_id_response.rb +7 -7
- data/lib/orb/models/customers/credits/top_up_create_params.rb +8 -8
- data/lib/orb/models/customers/credits/top_up_create_response.rb +7 -7
- data/lib/orb/models/customers/credits/top_up_list_by_external_id_params.rb +1 -1
- data/lib/orb/models/customers/credits/top_up_list_by_external_id_response.rb +7 -7
- data/lib/orb/models/customers/credits/top_up_list_params.rb +1 -1
- data/lib/orb/models/customers/credits/top_up_list_response.rb +7 -7
- data/lib/orb/models/dimensional_price_group.rb +7 -7
- data/lib/orb/models/dimensional_price_group_create_params.rb +2 -2
- data/lib/orb/models/dimensional_price_group_list_params.rb +1 -1
- data/lib/orb/models/event_ingest_params.rb +7 -7
- data/lib/orb/models/event_ingest_response.rb +4 -4
- data/lib/orb/models/event_search_params.rb +5 -5
- data/lib/orb/models/event_search_response.rb +8 -8
- data/lib/orb/models/event_update_params.rb +4 -4
- data/lib/orb/models/events/backfill_close_response.rb +7 -7
- data/lib/orb/models/events/backfill_create_params.rb +11 -11
- data/lib/orb/models/events/backfill_create_response.rb +7 -7
- data/lib/orb/models/events/backfill_fetch_response.rb +7 -7
- data/lib/orb/models/events/backfill_list_params.rb +1 -1
- data/lib/orb/models/events/backfill_list_response.rb +7 -7
- data/lib/orb/models/events/backfill_revert_response.rb +7 -7
- data/lib/orb/models/events/event_volumes.rb +1 -1
- data/lib/orb/models/events/volume_list_params.rb +7 -7
- data/lib/orb/models/invoice.rb +270 -270
- data/lib/orb/models/invoice_create_params.rb +12 -11
- data/lib/orb/models/invoice_fetch_upcoming_response.rb +266 -266
- data/lib/orb/models/invoice_issue_params.rb +4 -4
- data/lib/orb/models/invoice_line_item_create_params.rb +1 -1
- data/lib/orb/models/invoice_line_item_create_response.rb +27 -27
- data/lib/orb/models/invoice_list_params.rb +12 -12
- data/lib/orb/models/invoice_update_params.rb +2 -2
- data/lib/orb/models/item.rb +2 -2
- data/lib/orb/models/item_list_params.rb +1 -1
- data/lib/orb/models/metric_create_params.rb +2 -2
- data/lib/orb/models/metric_list_params.rb +5 -5
- data/lib/orb/models/metric_update_params.rb +2 -2
- data/lib/orb/models/percentage_discount.rb +2 -2
- data/lib/orb/models/plan.rb +35 -35
- data/lib/orb/models/plan_create_params.rb +267 -267
- data/lib/orb/models/plan_list_params.rb +5 -5
- data/lib/orb/models/plan_update_params.rb +4 -4
- data/lib/orb/models/plans/external_plan_id_update_params.rb +4 -4
- data/lib/orb/models/price.rb +158 -158
- data/lib/orb/models/price_create_params.rb +20 -20
- data/lib/orb/models/price_evaluate_params.rb +4 -4
- data/lib/orb/models/price_list_params.rb +1 -1
- data/lib/orb/models/price_update_params.rb +2 -2
- data/lib/orb/models/prices/external_price_id_update_params.rb +2 -2
- data/lib/orb/models/subscription.rb +114 -87
- data/lib/orb/models/subscription_cancel_params.rb +3 -3
- data/lib/orb/models/subscription_cancel_response.rb +150 -72
- data/lib/orb/models/subscription_change_apply_params.rb +33 -0
- data/lib/orb/models/subscription_change_apply_response.rb +1372 -0
- data/lib/orb/models/subscription_change_cancel_params.rb +19 -0
- data/lib/orb/models/subscription_change_cancel_response.rb +1372 -0
- data/lib/orb/models/subscription_change_retrieve_params.rb +19 -0
- data/lib/orb/models/subscription_change_retrieve_response.rb +1372 -0
- data/lib/orb/models/subscription_create_params.rb +641 -641
- data/lib/orb/models/subscription_create_response.rb +150 -72
- data/lib/orb/models/subscription_fetch_costs_params.rb +6 -6
- data/lib/orb/models/subscription_fetch_schedule_params.rb +5 -5
- data/lib/orb/models/subscription_fetch_schedule_response.rb +2 -2
- data/lib/orb/models/subscription_fetch_usage_params.rb +8 -8
- data/lib/orb/models/subscription_list_params.rb +5 -5
- data/lib/orb/models/subscription_price_intervals_params.rb +323 -323
- data/lib/orb/models/subscription_price_intervals_response.rb +152 -72
- data/lib/orb/models/subscription_schedule_plan_change_params.rb +651 -651
- data/lib/orb/models/subscription_schedule_plan_change_response.rb +152 -72
- data/lib/orb/models/subscription_trigger_phase_params.rb +3 -3
- data/lib/orb/models/subscription_trigger_phase_response.rb +152 -72
- data/lib/orb/models/subscription_unschedule_cancellation_response.rb +152 -72
- data/lib/orb/models/subscription_unschedule_fixed_fee_quantity_updates_response.rb +153 -73
- data/lib/orb/models/subscription_unschedule_pending_plan_changes_response.rb +152 -72
- data/lib/orb/models/subscription_update_fixed_fee_quantity_params.rb +8 -8
- data/lib/orb/models/subscription_update_fixed_fee_quantity_response.rb +152 -72
- data/lib/orb/models/subscription_update_params.rb +10 -10
- data/lib/orb/models/subscription_update_trial_params.rb +3 -3
- data/lib/orb/models/subscription_update_trial_response.rb +152 -72
- data/lib/orb/models/trial_discount.rb +1 -1
- data/lib/orb/models/usage_discount.rb +2 -2
- data/lib/orb/request_options.rb +7 -7
- data/lib/orb/resources/alerts.rb +38 -38
- data/lib/orb/resources/coupons/subscriptions.rb +3 -3
- data/lib/orb/resources/coupons.rb +9 -9
- data/lib/orb/resources/credit_notes.rb +8 -8
- data/lib/orb/resources/customers/balance_transactions.rb +26 -26
- data/lib/orb/resources/customers/costs.rb +232 -232
- data/lib/orb/resources/customers/credits/ledger.rb +344 -344
- data/lib/orb/resources/customers/credits/top_ups.rb +12 -12
- data/lib/orb/resources/customers/credits.rb +8 -8
- data/lib/orb/resources/customers.rb +59 -59
- data/lib/orb/resources/dimensional_price_groups.rb +6 -6
- data/lib/orb/resources/events/backfills.rb +49 -49
- data/lib/orb/resources/events/volume.rb +10 -10
- data/lib/orb/resources/events.rb +295 -295
- data/lib/orb/resources/invoice_line_items.rb +1 -1
- data/lib/orb/resources/invoices.rb +38 -38
- data/lib/orb/resources/items.rb +1 -1
- data/lib/orb/resources/metrics.rb +11 -11
- data/lib/orb/resources/plans/external_plan_id.rb +14 -14
- data/lib/orb/resources/plans.rb +22 -22
- data/lib/orb/resources/prices/external_price_id.rb +4 -4
- data/lib/orb/resources/prices.rb +30 -30
- data/lib/orb/resources/subscription_changes.rb +87 -0
- data/lib/orb/resources/subscriptions.rb +813 -813
- data/lib/orb/resources/top_level.rb +4 -4
- data/lib/orb/version.rb +1 -1
- data/lib/orb.rb +8 -0
- data/rbi/lib/orb/client.rbi +5 -4
- data/rbi/lib/orb/errors.rbi +3 -6
- data/rbi/lib/orb/internal/page.rbi +3 -6
- data/rbi/lib/orb/internal/transport/base_client.rbi +13 -27
- data/rbi/lib/orb/internal/transport/pooled_net_requester.rbi +8 -14
- data/rbi/lib/orb/internal/type/array_of.rbi +14 -18
- data/rbi/lib/orb/internal/type/base_model.rbi +51 -66
- data/rbi/lib/orb/internal/type/base_page.rbi +5 -10
- data/rbi/lib/orb/internal/type/boolean.rbi +12 -10
- data/rbi/lib/orb/internal/type/converter.rbi +44 -37
- data/rbi/lib/orb/internal/type/enum.rbi +24 -21
- data/rbi/lib/orb/internal/type/hash_of.rbi +13 -18
- data/rbi/lib/orb/internal/type/io_like.rbi +49 -0
- data/rbi/lib/orb/internal/type/request_parameters.rbi +1 -2
- data/rbi/lib/orb/internal/type/union.rbi +19 -21
- data/rbi/lib/orb/internal/type/unknown.rbi +10 -9
- data/rbi/lib/orb/internal/util.rbi +67 -70
- data/rbi/lib/orb/internal.rbi +1 -1
- data/rbi/lib/orb/models/alert.rbi +21 -33
- data/rbi/lib/orb/models/alert_create_for_customer_params.rbi +8 -13
- data/rbi/lib/orb/models/alert_create_for_external_customer_params.rbi +8 -13
- data/rbi/lib/orb/models/alert_create_for_subscription_params.rbi +8 -13
- data/rbi/lib/orb/models/alert_disable_params.rbi +2 -4
- data/rbi/lib/orb/models/alert_enable_params.rbi +2 -4
- data/rbi/lib/orb/models/alert_list_params.rbi +3 -6
- data/rbi/lib/orb/models/alert_retrieve_params.rbi +2 -4
- data/rbi/lib/orb/models/alert_update_params.rbi +7 -11
- data/rbi/lib/orb/models/amount_discount.rbi +4 -7
- data/rbi/lib/orb/models/billable_metric.rbi +10 -13
- data/rbi/lib/orb/models/billing_cycle_relative_date.rbi +1 -2
- data/rbi/lib/orb/models/coupon.rbi +9 -11
- data/rbi/lib/orb/models/coupon_archive_params.rbi +2 -4
- data/rbi/lib/orb/models/coupon_create_params.rbi +8 -14
- data/rbi/lib/orb/models/coupon_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/coupon_list_params.rbi +3 -4
- data/rbi/lib/orb/models/coupons/subscription_list_params.rbi +3 -5
- data/rbi/lib/orb/models/credit_note.rbi +22 -45
- data/rbi/lib/orb/models/credit_note_create_params.rbi +5 -10
- data/rbi/lib/orb/models/credit_note_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/credit_note_list_params.rbi +3 -6
- data/rbi/lib/orb/models/customer.rbi +256 -281
- data/rbi/lib/orb/models/customer_create_params.rbi +251 -276
- data/rbi/lib/orb/models/customer_delete_params.rbi +2 -4
- data/rbi/lib/orb/models/customer_fetch_by_external_id_params.rbi +2 -4
- data/rbi/lib/orb/models/customer_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/customer_list_params.rbi +3 -6
- data/rbi/lib/orb/models/customer_sync_payment_methods_from_gateway_by_external_customer_id_params.rbi +2 -4
- data/rbi/lib/orb/models/customer_sync_payment_methods_from_gateway_params.rbi +2 -4
- data/rbi/lib/orb/models/customer_update_by_external_id_params.rbi +252 -277
- data/rbi/lib/orb/models/customer_update_params.rbi +252 -277
- data/rbi/lib/orb/models/customers/balance_transaction_create_params.rbi +3 -6
- data/rbi/lib/orb/models/customers/balance_transaction_create_response.rbi +10 -19
- data/rbi/lib/orb/models/customers/balance_transaction_list_params.rbi +3 -6
- data/rbi/lib/orb/models/customers/balance_transaction_list_response.rbi +10 -19
- data/rbi/lib/orb/models/customers/cost_list_by_external_id_params.rbi +8 -10
- data/rbi/lib/orb/models/customers/cost_list_by_external_id_response.rbi +6 -12
- data/rbi/lib/orb/models/customers/cost_list_params.rbi +8 -10
- data/rbi/lib/orb/models/customers/cost_list_response.rbi +6 -12
- data/rbi/lib/orb/models/customers/credit_list_by_external_id_params.rbi +3 -4
- data/rbi/lib/orb/models/customers/credit_list_by_external_id_response.rbi +2 -4
- data/rbi/lib/orb/models/customers/credit_list_params.rbi +3 -4
- data/rbi/lib/orb/models/customers/credit_list_response.rbi +2 -4
- data/rbi/lib/orb/models/customers/credits/ledger_create_entry_by_external_id_params.rbi +26 -33
- data/rbi/lib/orb/models/customers/credits/ledger_create_entry_by_external_id_response.rbi +79 -136
- data/rbi/lib/orb/models/customers/credits/ledger_create_entry_params.rbi +26 -33
- data/rbi/lib/orb/models/customers/credits/ledger_create_entry_response.rbi +78 -135
- data/rbi/lib/orb/models/customers/credits/ledger_list_by_external_id_params.rbi +5 -10
- data/rbi/lib/orb/models/customers/credits/ledger_list_by_external_id_response.rbi +79 -136
- data/rbi/lib/orb/models/customers/credits/ledger_list_params.rbi +5 -10
- data/rbi/lib/orb/models/customers/credits/ledger_list_response.rbi +74 -131
- data/rbi/lib/orb/models/customers/credits/top_up_create_by_external_id_params.rbi +13 -19
- data/rbi/lib/orb/models/customers/credits/top_up_create_by_external_id_response.rbi +12 -18
- data/rbi/lib/orb/models/customers/credits/top_up_create_params.rbi +13 -19
- data/rbi/lib/orb/models/customers/credits/top_up_create_response.rbi +12 -18
- data/rbi/lib/orb/models/customers/credits/top_up_delete_by_external_id_params.rbi +2 -4
- data/rbi/lib/orb/models/customers/credits/top_up_delete_params.rbi +2 -4
- data/rbi/lib/orb/models/customers/credits/top_up_list_by_external_id_params.rbi +3 -5
- data/rbi/lib/orb/models/customers/credits/top_up_list_by_external_id_response.rbi +12 -18
- data/rbi/lib/orb/models/customers/credits/top_up_list_params.rbi +3 -5
- data/rbi/lib/orb/models/customers/credits/top_up_list_response.rbi +12 -18
- data/rbi/lib/orb/models/dimensional_price_group.rbi +8 -9
- data/rbi/lib/orb/models/dimensional_price_group_create_params.rbi +4 -7
- data/rbi/lib/orb/models/dimensional_price_group_list_params.rbi +3 -5
- data/rbi/lib/orb/models/dimensional_price_group_retrieve_params.rbi +2 -4
- data/rbi/lib/orb/models/dimensional_price_groups/external_dimensional_price_group_id_retrieve_params.rbi +2 -4
- data/rbi/lib/orb/models/dimensional_price_groups.rbi +2 -4
- data/rbi/lib/orb/models/discount.rbi +1 -2
- data/rbi/lib/orb/models/evaluate_price_group.rbi +3 -6
- data/rbi/lib/orb/models/event_deprecate_params.rbi +2 -4
- data/rbi/lib/orb/models/event_deprecate_response.rbi +2 -4
- data/rbi/lib/orb/models/event_ingest_params.rbi +10 -13
- data/rbi/lib/orb/models/event_ingest_response.rbi +10 -16
- data/rbi/lib/orb/models/event_search_params.rbi +7 -9
- data/rbi/lib/orb/models/event_search_response.rbi +11 -14
- data/rbi/lib/orb/models/event_update_params.rbi +5 -6
- data/rbi/lib/orb/models/event_update_response.rbi +2 -4
- data/rbi/lib/orb/models/events/backfill_close_params.rbi +2 -4
- data/rbi/lib/orb/models/events/backfill_close_response.rbi +10 -14
- data/rbi/lib/orb/models/events/backfill_create_params.rbi +13 -16
- data/rbi/lib/orb/models/events/backfill_create_response.rbi +10 -14
- data/rbi/lib/orb/models/events/backfill_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/events/backfill_fetch_response.rbi +10 -14
- data/rbi/lib/orb/models/events/backfill_list_params.rbi +3 -5
- data/rbi/lib/orb/models/events/backfill_list_response.rbi +10 -14
- data/rbi/lib/orb/models/events/backfill_revert_params.rbi +2 -4
- data/rbi/lib/orb/models/events/backfill_revert_response.rbi +10 -14
- data/rbi/lib/orb/models/events/event_volumes.rbi +5 -9
- data/rbi/lib/orb/models/events/volume_list_params.rbi +9 -11
- data/rbi/lib/orb/models/invoice.rbi +388 -465
- data/rbi/lib/orb/models/invoice_create_params.rbi +19 -26
- data/rbi/lib/orb/models/invoice_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/invoice_fetch_upcoming_params.rbi +2 -4
- data/rbi/lib/orb/models/invoice_fetch_upcoming_response.rbi +381 -460
- data/rbi/lib/orb/models/invoice_issue_params.rbi +6 -8
- data/rbi/lib/orb/models/invoice_level_discount.rbi +1 -2
- data/rbi/lib/orb/models/invoice_line_item_create_params.rbi +3 -5
- data/rbi/lib/orb/models/invoice_line_item_create_response.rbi +101 -143
- data/rbi/lib/orb/models/invoice_list_params.rbi +8 -13
- data/rbi/lib/orb/models/invoice_mark_paid_params.rbi +2 -4
- data/rbi/lib/orb/models/invoice_pay_params.rbi +2 -4
- data/rbi/lib/orb/models/invoice_update_params.rbi +4 -6
- data/rbi/lib/orb/models/invoice_void_params.rbi +2 -4
- data/rbi/lib/orb/models/item.rbi +7 -12
- data/rbi/lib/orb/models/item_create_params.rbi +2 -4
- data/rbi/lib/orb/models/item_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/item_list_params.rbi +3 -5
- data/rbi/lib/orb/models/item_update_params.rbi +5 -10
- data/rbi/lib/orb/models/metric_create_params.rbi +4 -6
- data/rbi/lib/orb/models/metric_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/metric_list_params.rbi +3 -6
- data/rbi/lib/orb/models/metric_update_params.rbi +4 -6
- data/rbi/lib/orb/models/pagination_metadata.rbi +2 -4
- data/rbi/lib/orb/models/percentage_discount.rbi +5 -8
- data/rbi/lib/orb/models/plan.rbi +180 -219
- data/rbi/lib/orb/models/plan_create_params.rbi +670 -951
- data/rbi/lib/orb/models/plan_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/plan_list_params.rbi +4 -8
- data/rbi/lib/orb/models/plan_update_params.rbi +6 -8
- data/rbi/lib/orb/models/plans/external_plan_id_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/plans/external_plan_id_update_params.rbi +6 -8
- data/rbi/lib/orb/models/price.rbi +827 -1494
- data/rbi/lib/orb/models/price_create_params.rbi +60 -101
- data/rbi/lib/orb/models/price_evaluate_params.rbi +6 -9
- data/rbi/lib/orb/models/price_evaluate_response.rbi +2 -4
- data/rbi/lib/orb/models/price_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/price_list_params.rbi +3 -5
- data/rbi/lib/orb/models/price_update_params.rbi +4 -6
- data/rbi/lib/orb/models/prices/external_price_id_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/prices/external_price_id_update_params.rbi +4 -6
- data/rbi/lib/orb/models/subscription.rbi +167 -187
- data/rbi/lib/orb/models/subscription_cancel_params.rbi +5 -7
- data/rbi/lib/orb/models/subscription_cancel_response.rbi +224 -178
- data/rbi/lib/orb/models/subscription_change_apply_params.rbi +40 -0
- data/rbi/lib/orb/models/subscription_change_apply_response.rbi +1554 -0
- data/rbi/lib/orb/models/subscription_change_cancel_params.rbi +18 -0
- data/rbi/lib/orb/models/subscription_change_cancel_response.rbi +1565 -0
- data/rbi/lib/orb/models/subscription_change_retrieve_params.rbi +18 -0
- data/rbi/lib/orb/models/subscription_change_retrieve_response.rbi +1581 -0
- data/rbi/lib/orb/models/subscription_create_params.rbi +1372 -1968
- data/rbi/lib/orb/models/subscription_create_response.rbi +224 -178
- data/rbi/lib/orb/models/subscription_fetch_costs_params.rbi +8 -10
- data/rbi/lib/orb/models/subscription_fetch_costs_response.rbi +6 -12
- data/rbi/lib/orb/models/subscription_fetch_params.rbi +2 -4
- data/rbi/lib/orb/models/subscription_fetch_schedule_params.rbi +3 -6
- data/rbi/lib/orb/models/subscription_fetch_schedule_response.rbi +6 -10
- data/rbi/lib/orb/models/subscription_fetch_usage_params.rbi +12 -17
- data/rbi/lib/orb/models/subscription_list_params.rbi +4 -8
- data/rbi/lib/orb/models/subscription_price_intervals_params.rbi +772 -1124
- data/rbi/lib/orb/models/subscription_price_intervals_response.rbi +228 -178
- data/rbi/lib/orb/models/subscription_schedule_plan_change_params.rbi +1396 -1993
- data/rbi/lib/orb/models/subscription_schedule_plan_change_response.rbi +238 -182
- data/rbi/lib/orb/models/subscription_trigger_phase_params.rbi +5 -7
- data/rbi/lib/orb/models/subscription_trigger_phase_response.rbi +224 -178
- data/rbi/lib/orb/models/subscription_unschedule_cancellation_params.rbi +2 -4
- data/rbi/lib/orb/models/subscription_unschedule_cancellation_response.rbi +238 -182
- data/rbi/lib/orb/models/subscription_unschedule_fixed_fee_quantity_updates_params.rbi +2 -4
- data/rbi/lib/orb/models/subscription_unschedule_fixed_fee_quantity_updates_response.rbi +265 -199
- data/rbi/lib/orb/models/subscription_unschedule_pending_plan_changes_params.rbi +2 -4
- data/rbi/lib/orb/models/subscription_unschedule_pending_plan_changes_response.rbi +264 -198
- data/rbi/lib/orb/models/subscription_update_fixed_fee_quantity_params.rbi +11 -15
- data/rbi/lib/orb/models/subscription_update_fixed_fee_quantity_response.rbi +238 -182
- data/rbi/lib/orb/models/subscription_update_params.rbi +12 -15
- data/rbi/lib/orb/models/subscription_update_trial_params.rbi +6 -9
- data/rbi/lib/orb/models/subscription_update_trial_response.rbi +224 -178
- data/rbi/lib/orb/models/subscription_usage.rbi +24 -43
- data/rbi/lib/orb/models/subscriptions.rbi +2 -4
- data/rbi/lib/orb/models/top_level_ping_params.rbi +2 -4
- data/rbi/lib/orb/models/top_level_ping_response.rbi +2 -4
- data/rbi/lib/orb/models/trial_discount.rbi +4 -8
- data/rbi/lib/orb/models/usage_discount.rbi +5 -8
- data/rbi/lib/orb/request_options.rbi +9 -11
- data/rbi/lib/orb/resources/alerts.rbi +44 -60
- data/rbi/lib/orb/resources/coupons/subscriptions.rbi +6 -9
- data/rbi/lib/orb/resources/coupons.rbi +18 -25
- data/rbi/lib/orb/resources/credit_notes.rbi +9 -15
- data/rbi/lib/orb/resources/customers/balance_transactions.rbi +26 -31
- data/rbi/lib/orb/resources/customers/costs.rbi +241 -246
- data/rbi/lib/orb/resources/customers/credits/ledger.rbi +387 -396
- data/rbi/lib/orb/resources/customers/credits/top_ups.rbi +29 -40
- data/rbi/lib/orb/resources/customers/credits.rbi +15 -20
- data/rbi/lib/orb/resources/customers.rbi +407 -417
- data/rbi/lib/orb/resources/dimensional_price_groups/external_dimensional_price_group_id.rbi +2 -4
- data/rbi/lib/orb/resources/dimensional_price_groups.rbi +13 -19
- data/rbi/lib/orb/resources/events/backfills.rbi +61 -69
- data/rbi/lib/orb/resources/events/volume.rbi +19 -22
- data/rbi/lib/orb/resources/events.rbi +311 -319
- data/rbi/lib/orb/resources/invoice_line_items.rbi +4 -7
- data/rbi/lib/orb/resources/invoices.rbi +62 -76
- data/rbi/lib/orb/resources/items.rbi +7 -14
- data/rbi/lib/orb/resources/metrics.rbi +17 -25
- data/rbi/lib/orb/resources/plans/external_plan_id.rbi +21 -25
- data/rbi/lib/orb/resources/plans.rbi +63 -71
- data/rbi/lib/orb/resources/prices/external_price_id.rbi +9 -13
- data/rbi/lib/orb/resources/prices.rbi +77 -87
- data/rbi/lib/orb/resources/subscription_changes.rbi +61 -0
- data/rbi/lib/orb/resources/subscriptions.rbi +933 -963
- data/rbi/lib/orb/resources/top_level.rbi +6 -8
- data/sig/orb/client.rbs +2 -0
- data/sig/orb/internal/transport/pooled_net_requester.rbs +1 -1
- data/sig/orb/internal/type/array_of.rbs +5 -2
- data/sig/orb/internal/type/base_model.rbs +5 -2
- data/sig/orb/internal/type/boolean.rbs +5 -2
- data/sig/orb/internal/type/converter.rbs +11 -5
- data/sig/orb/internal/type/enum.rbs +5 -2
- data/sig/orb/internal/type/hash_of.rbs +5 -2
- data/sig/orb/internal/type/io_like.rbs +23 -0
- data/sig/orb/internal/type/union.rbs +5 -2
- data/sig/orb/internal/type/unknown.rbs +5 -2
- data/sig/orb/internal/util.rbs +17 -2
- data/sig/orb/models/subscription.rbs +14 -0
- data/sig/orb/models/subscription_cancel_response.rbs +47 -2
- data/sig/orb/models/subscription_change_apply_params.rbs +24 -0
- data/sig/orb/models/subscription_change_apply_response.rbs +784 -0
- data/sig/orb/models/subscription_change_cancel_params.rbs +15 -0
- data/sig/orb/models/subscription_change_cancel_response.rbs +784 -0
- data/sig/orb/models/subscription_change_retrieve_params.rbs +15 -0
- data/sig/orb/models/subscription_change_retrieve_response.rbs +784 -0
- data/sig/orb/models/subscription_create_response.rbs +47 -2
- data/sig/orb/models/subscription_price_intervals_response.rbs +47 -2
- data/sig/orb/models/subscription_schedule_plan_change_response.rbs +47 -2
- data/sig/orb/models/subscription_trigger_phase_response.rbs +47 -2
- data/sig/orb/models/subscription_unschedule_cancellation_response.rbs +47 -2
- data/sig/orb/models/subscription_unschedule_fixed_fee_quantity_updates_response.rbs +47 -2
- data/sig/orb/models/subscription_unschedule_pending_plan_changes_response.rbs +47 -2
- data/sig/orb/models/subscription_update_fixed_fee_quantity_response.rbs +47 -2
- data/sig/orb/models/subscription_update_trial_response.rbs +47 -2
- data/sig/orb/resources/customers.rbs +2 -2
- data/sig/orb/resources/subscription_changes.rbs +24 -0
- metadata +28 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96cef32525e1e12a5b3d6e1eb8839eceb8aea9e3dddb1b8dc906b4b793bdec35
|
4
|
+
data.tar.gz: 148cb13c2428e83eb8e9dbf6720601ad3b03c90b2b2df73bad9b1d8022dab983
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aeb7b0a8da2dc0c3b5134cb979eb60af78bc8ce3dc64fb204da38e40ef7cb5ca0f9eb476eb601dd40fd3b796f2b459a8182b83f1176dd37c68c35d4f7cb3be33
|
7
|
+
data.tar.gz: 87f4b582111e480f15e830a0b537ca205c89d5958b2b3ff4dc275e2c8966805b8e8b804205f5e945636cc7532940f25846dad64411c8110cd0dfc630f3b261fc
|
data/README.md
CHANGED
@@ -15,7 +15,7 @@ To use this gem, install via Bundler by adding the following to your application
|
|
15
15
|
<!-- x-release-please-start-version -->
|
16
16
|
|
17
17
|
```ruby
|
18
|
-
gem "orb-billing", "~> 0.1.0
|
18
|
+
gem "orb-billing", "~> 0.1.0"
|
19
19
|
```
|
20
20
|
|
21
21
|
<!-- x-release-please-end -->
|
@@ -148,6 +148,13 @@ After Solargraph is installed, **you must populate its index** either via the pr
|
|
148
148
|
bundle exec solargraph gems
|
149
149
|
```
|
150
150
|
|
151
|
+
Note: if you had installed the gem either using a `git:` or `github:` URL, or had vendored the gem using bundler, you will need to set up your [`.solargraph.yml`](https://solargraph.org/guides/configuration) to include the path to the gem's `lib` directory.
|
152
|
+
|
153
|
+
```yaml
|
154
|
+
include:
|
155
|
+
- 'vendor/bundle/ruby/*/gems/orb-billing-*/lib/**/*.rb'
|
156
|
+
```
|
157
|
+
|
151
158
|
Otherwise Solargraph will not be able to provide type information or auto-completion for any non-indexed libraries.
|
152
159
|
|
153
160
|
### Sorbet
|
@@ -161,7 +168,8 @@ Due to limitations with the Sorbet type system, where a method otherwise can tak
|
|
161
168
|
Please follow Sorbet's [setup guides](https://sorbet.org/docs/adopting) for best experience.
|
162
169
|
|
163
170
|
```ruby
|
164
|
-
params =
|
171
|
+
params =
|
172
|
+
Orb::Models::CustomerCreateParams.new(email: "example-customer@withorb.com", name: "My Customer")
|
165
173
|
|
166
174
|
orb.customers.create(**params)
|
167
175
|
```
|
data/lib/orb/client.rb
CHANGED
@@ -60,6 +60,9 @@ module Orb
|
|
60
60
|
# @return [Orb::Resources::DimensionalPriceGroups]
|
61
61
|
attr_reader :dimensional_price_groups
|
62
62
|
|
63
|
+
# @return [Orb::Resources::SubscriptionChanges]
|
64
|
+
attr_reader :subscription_changes
|
65
|
+
|
63
66
|
# @api private
|
64
67
|
#
|
65
68
|
# @return [Hash{String=>String}]
|
@@ -124,6 +127,7 @@ module Orb
|
|
124
127
|
@subscriptions = Orb::Resources::Subscriptions.new(client: self)
|
125
128
|
@alerts = Orb::Resources::Alerts.new(client: self)
|
126
129
|
@dimensional_price_groups = Orb::Resources::DimensionalPriceGroups.new(client: self)
|
130
|
+
@subscription_changes = Orb::Resources::SubscriptionChanges.new(client: self)
|
127
131
|
end
|
128
132
|
end
|
129
133
|
end
|
@@ -380,7 +380,7 @@ module Orb
|
|
380
380
|
in (400..) | Orb::Errors::APIConnectionError
|
381
381
|
self.class.reap_connection!(status, stream: stream)
|
382
382
|
|
383
|
-
delay = retry_delay(response, retry_count: retry_count)
|
383
|
+
delay = retry_delay(response || {}, retry_count: retry_count)
|
384
384
|
sleep(delay)
|
385
385
|
|
386
386
|
send_request(
|
@@ -393,7 +393,7 @@ module Orb
|
|
393
393
|
end
|
394
394
|
|
395
395
|
# Execute the request specified by `req`. This is the method that all resource
|
396
|
-
#
|
396
|
+
# methods call into.
|
397
397
|
#
|
398
398
|
# @overload request(method, path, query: {}, headers: {}, body: nil, unwrap: nil, page: nil, stream: nil, model: Orb::Internal::Type::Unknown, options: {})
|
399
399
|
#
|
@@ -6,7 +6,7 @@ module Orb
|
|
6
6
|
# @api private
|
7
7
|
class PooledNetRequester
|
8
8
|
# from the golang stdlib
|
9
|
-
#
|
9
|
+
# https://github.com/golang/go/blob/c8eced8580028328fde7c03cbfcb720ce15b2358/src/net/http/transport.go#L49
|
10
10
|
KEEP_ALIVE_TIMEOUT = 30
|
11
11
|
|
12
12
|
class << self
|
@@ -54,7 +54,7 @@ module Orb
|
|
54
54
|
# @param blk [Proc]
|
55
55
|
#
|
56
56
|
# @yieldparam [String]
|
57
|
-
# @return [Net::HTTPGenericRequest]
|
57
|
+
# @return [Array(Net::HTTPGenericRequest, Proc)]
|
58
58
|
def build_request(request, &blk)
|
59
59
|
method, url, headers, body = request.fetch_values(:method, :url, :headers, :body)
|
60
60
|
req = Net::HTTPGenericRequest.new(
|
@@ -75,12 +75,12 @@ module Orb
|
|
75
75
|
in StringIO
|
76
76
|
req["content-length"] ||= body.size.to_s unless req["transfer-encoding"]
|
77
77
|
req.body_stream = Orb::Internal::Util::ReadIOAdapter.new(body, &blk)
|
78
|
-
in IO | Enumerator
|
78
|
+
in Pathname | IO | Enumerator
|
79
79
|
req["transfer-encoding"] ||= "chunked" unless req["content-length"]
|
80
80
|
req.body_stream = Orb::Internal::Util::ReadIOAdapter.new(body, &blk)
|
81
81
|
end
|
82
82
|
|
83
|
-
req
|
83
|
+
[req, req.body_stream&.method(:close)]
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -123,13 +123,17 @@ module Orb
|
|
123
123
|
def execute(request)
|
124
124
|
url, deadline = request.fetch_values(:url, :deadline)
|
125
125
|
|
126
|
+
req = nil
|
126
127
|
eof = false
|
127
128
|
finished = false
|
129
|
+
closing = nil
|
130
|
+
|
131
|
+
# rubocop:disable Metrics/BlockLength
|
128
132
|
enum = Enumerator.new do |y|
|
129
133
|
with_pool(url, deadline: deadline) do |conn|
|
130
134
|
next if finished
|
131
135
|
|
132
|
-
req = self.class.build_request(request) do
|
136
|
+
req, closing = self.class.build_request(request) do
|
133
137
|
self.class.calibrate_socket_timeout(conn, deadline)
|
134
138
|
end
|
135
139
|
|
@@ -154,8 +158,11 @@ module Orb
|
|
154
158
|
end
|
155
159
|
end
|
156
160
|
rescue Timeout::Error
|
157
|
-
raise Orb::Errors::APITimeoutError
|
161
|
+
raise Orb::Errors::APITimeoutError.new(url: url, request: req)
|
162
|
+
rescue StandardError
|
163
|
+
raise Orb::Errors::APIConnectionError.new(url: url, request: req)
|
158
164
|
end
|
165
|
+
# rubocop:enable Metrics/BlockLength
|
159
166
|
|
160
167
|
conn, _, response = enum.next
|
161
168
|
body = Orb::Internal::Util.fused_enum(enum, external: true) do
|
@@ -165,7 +172,9 @@ module Orb
|
|
165
172
|
rescue StopIteration
|
166
173
|
nil
|
167
174
|
end
|
175
|
+
ensure
|
168
176
|
conn.finish if !eof && conn&.started?
|
177
|
+
closing&.call
|
169
178
|
end
|
170
179
|
[Integer(response.code), response, (response.body = body)]
|
171
180
|
end
|
@@ -79,10 +79,20 @@ module Orb
|
|
79
79
|
#
|
80
80
|
# @param value [Array<Object>, Object]
|
81
81
|
#
|
82
|
+
# @param state [Hash{Symbol=>Object}] .
|
83
|
+
#
|
84
|
+
# @option state [Boolean] :can_retry
|
85
|
+
#
|
82
86
|
# @return [Array<Object>, Object]
|
83
|
-
def dump(value)
|
87
|
+
def dump(value, state:)
|
84
88
|
target = item_type
|
85
|
-
value.is_a?(Array)
|
89
|
+
if value.is_a?(Array)
|
90
|
+
value.map do
|
91
|
+
Orb::Internal::Type::Converter.dump(target, _1, state: state)
|
92
|
+
end
|
93
|
+
else
|
94
|
+
super
|
95
|
+
end
|
86
96
|
end
|
87
97
|
|
88
98
|
# @api private
|
@@ -19,7 +19,7 @@ module Orb
|
|
19
19
|
# @api private
|
20
20
|
#
|
21
21
|
# Assumes superclass fields are totally defined before fields are accessed /
|
22
|
-
#
|
22
|
+
# defined on subclasses.
|
23
23
|
#
|
24
24
|
# @return [Hash{Symbol=>Hash{Symbol=>Object}}]
|
25
25
|
def known_fields
|
@@ -143,7 +143,7 @@ module Orb
|
|
143
143
|
# @api private
|
144
144
|
#
|
145
145
|
# `request_only` attributes not excluded from `.#coerce` when receiving responses
|
146
|
-
#
|
146
|
+
# even if well behaved servers should not send them
|
147
147
|
#
|
148
148
|
# @param blk [Proc]
|
149
149
|
private def request_only(&blk)
|
@@ -252,36 +252,37 @@ module Orb
|
|
252
252
|
#
|
253
253
|
# @param value [Orb::Internal::Type::BaseModel, Object]
|
254
254
|
#
|
255
|
+
# @param state [Hash{Symbol=>Object}] .
|
256
|
+
#
|
257
|
+
# @option state [Boolean] :can_retry
|
258
|
+
#
|
255
259
|
# @return [Hash{Object=>Object}, Object]
|
256
|
-
def dump(value)
|
260
|
+
def dump(value, state:)
|
257
261
|
unless (coerced = Orb::Internal::Util.coerce_hash(value)).is_a?(Hash)
|
258
262
|
return super
|
259
263
|
end
|
260
264
|
|
261
|
-
is_param = singleton_class <= Orb::Internal::Type::RequestParameters::Converter
|
262
265
|
acc = {}
|
263
266
|
|
264
267
|
coerced.each do |key, val|
|
265
268
|
name = key.is_a?(String) ? key.to_sym : key
|
266
269
|
case (field = known_fields[name])
|
267
270
|
in nil
|
268
|
-
acc.store(name, super(val))
|
271
|
+
acc.store(name, super(val, state: state))
|
269
272
|
else
|
270
|
-
mode, type_fn = field.fetch_values(:mode, :type_fn)
|
273
|
+
api_name, mode, type_fn = field.fetch_values(:api_name, :mode, :type_fn)
|
271
274
|
case mode
|
272
275
|
in :coerce
|
273
276
|
next
|
274
277
|
else
|
275
278
|
target = type_fn.call
|
276
|
-
api_name
|
277
|
-
acc.store(api_name, Orb::Internal::Type::Converter.dump(target, val))
|
279
|
+
acc.store(api_name, Orb::Internal::Type::Converter.dump(target, val, state: state))
|
278
280
|
end
|
279
281
|
end
|
280
282
|
end
|
281
283
|
|
282
|
-
known_fields.
|
283
|
-
mode, const = field.fetch_values(:mode, :const)
|
284
|
-
api_name = is_param ? name : field.fetch(:api_name)
|
284
|
+
known_fields.each_value do |field|
|
285
|
+
api_name, mode, const = field.fetch_values(:api_name, :mode, :const)
|
285
286
|
next if mode == :coerce || acc.key?(api_name) || const == Orb::Internal::OMIT
|
286
287
|
acc.store(api_name, const)
|
287
288
|
end
|
@@ -291,11 +292,11 @@ module Orb
|
|
291
292
|
end
|
292
293
|
|
293
294
|
# Returns the raw value associated with the given key, if found. Otherwise, nil is
|
294
|
-
#
|
295
|
+
# returned.
|
295
296
|
#
|
296
|
-
#
|
297
|
-
#
|
298
|
-
#
|
297
|
+
# It is valid to lookup keys that are not in the API spec, for example to access
|
298
|
+
# undocumented features. This method does not parse response data into
|
299
|
+
# higher-level types. Lookup by anything other than a Symbol is an ArgumentError.
|
299
300
|
#
|
300
301
|
# @param key [Symbol]
|
301
302
|
#
|
@@ -310,12 +311,12 @@ module Orb
|
|
310
311
|
|
311
312
|
# Returns a Hash of the data underlying this object. O(1)
|
312
313
|
#
|
313
|
-
#
|
314
|
-
#
|
315
|
-
#
|
314
|
+
# Keys are Symbols and values are the raw values from the response. The return
|
315
|
+
# value indicates which values were ever set on the object. i.e. there will be a
|
316
|
+
# key in this hash if they ever were, even if the set value was nil.
|
316
317
|
#
|
317
|
-
#
|
318
|
-
#
|
318
|
+
# This method is not recursive. The returned value is shared by the object, so it
|
319
|
+
# should not be mutated.
|
319
320
|
#
|
320
321
|
# @return [Hash{Symbol=>Object}]
|
321
322
|
def to_h = @data
|
@@ -340,12 +341,12 @@ module Orb
|
|
340
341
|
# @param a [Object]
|
341
342
|
#
|
342
343
|
# @return [String]
|
343
|
-
def to_json(*a) =
|
344
|
+
def to_json(*a) = Orb::Internal::Type::Converter.dump(self.class, self).to_json(*a)
|
344
345
|
|
345
346
|
# @param a [Object]
|
346
347
|
#
|
347
348
|
# @return [String]
|
348
|
-
def to_yaml(*a) =
|
349
|
+
def to_yaml(*a) = Orb::Internal::Type::Converter.dump(self.class, self).to_yaml(*a)
|
349
350
|
|
350
351
|
# Create a new instance of a model.
|
351
352
|
#
|
@@ -45,8 +45,12 @@ module Orb
|
|
45
45
|
# #
|
46
46
|
# # @param value [Boolean, Object]
|
47
47
|
# #
|
48
|
+
# # @param state [Hash{Symbol=>Object}] .
|
49
|
+
# #
|
50
|
+
# # @option state [Boolean] :can_retry
|
51
|
+
# #
|
48
52
|
# # @return [Boolean, Object]
|
49
|
-
# def dump(value) = super
|
53
|
+
# def dump(value, state:) = super
|
50
54
|
end
|
51
55
|
end
|
52
56
|
end
|
@@ -3,7 +3,6 @@
|
|
3
3
|
module Orb
|
4
4
|
module Internal
|
5
5
|
module Type
|
6
|
-
# rubocop:disable Metrics/ModuleLength
|
7
6
|
# @api private
|
8
7
|
module Converter
|
9
8
|
# rubocop:disable Lint/UnusedMethodArgument
|
@@ -27,15 +26,24 @@ module Orb
|
|
27
26
|
#
|
28
27
|
# @param value [Object]
|
29
28
|
#
|
29
|
+
# @param state [Hash{Symbol=>Object}] .
|
30
|
+
#
|
31
|
+
# @option state [Boolean] :can_retry
|
32
|
+
#
|
30
33
|
# @return [Object]
|
31
|
-
def dump(value)
|
34
|
+
def dump(value, state:)
|
32
35
|
case value
|
33
36
|
in Array
|
34
|
-
value.map { Orb::Internal::Type::Unknown.dump(_1) }
|
37
|
+
value.map { Orb::Internal::Type::Unknown.dump(_1, state: state) }
|
35
38
|
in Hash
|
36
|
-
value.transform_values { Orb::Internal::Type::Unknown.dump(_1) }
|
39
|
+
value.transform_values { Orb::Internal::Type::Unknown.dump(_1, state: state) }
|
37
40
|
in Orb::Internal::Type::BaseModel
|
38
|
-
value.class.dump(value)
|
41
|
+
value.class.dump(value, state: state)
|
42
|
+
in StringIO
|
43
|
+
value.string
|
44
|
+
in Pathname | IO
|
45
|
+
state[:can_retry] = false if value.is_a?(IO)
|
46
|
+
Orb::Internal::Util::SerializationAdapter.new(value)
|
39
47
|
else
|
40
48
|
value
|
41
49
|
end
|
@@ -76,37 +84,37 @@ module Orb
|
|
76
84
|
#
|
77
85
|
# Based on `target`, transform `value` into `target`, to the extent possible:
|
78
86
|
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
#
|
82
|
-
#
|
87
|
+
# 1. if the given `value` conforms to `target` already, return the given `value`
|
88
|
+
# 2. if it's possible and safe to convert the given `value` to `target`, then the
|
89
|
+
# converted value
|
90
|
+
# 3. otherwise, the given `value` unaltered
|
83
91
|
#
|
84
|
-
#
|
85
|
-
#
|
92
|
+
# The coercion process is subject to improvement between minor release versions.
|
93
|
+
# See https://docs.pydantic.dev/latest/concepts/unions/#smart-mode
|
86
94
|
#
|
87
95
|
# @param target [Orb::Internal::Type::Converter, Class]
|
88
96
|
#
|
89
97
|
# @param value [Object]
|
90
98
|
#
|
91
99
|
# @param state [Hash{Symbol=>Object}] The `strictness` is one of `true`, `false`, or `:strong`. This informs the
|
92
|
-
#
|
93
|
-
#
|
100
|
+
# coercion strategy when we have to decide between multiple possible conversion
|
101
|
+
# targets:
|
94
102
|
#
|
95
|
-
#
|
96
|
-
#
|
97
|
-
#
|
98
|
-
#
|
103
|
+
# - `true`: the conversion must be exact, with minimum coercion.
|
104
|
+
# - `false`: the conversion can be approximate, with some coercion.
|
105
|
+
# - `:strong`: the conversion must be exact, with no coercion, and raise an error
|
106
|
+
# if not possible.
|
99
107
|
#
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
108
|
+
# The `exactness` is `Hash` with keys being one of `yes`, `no`, or `maybe`. For
|
109
|
+
# any given conversion attempt, the exactness will be updated based on how closely
|
110
|
+
# the value recursively matches the target type:
|
103
111
|
#
|
104
|
-
#
|
105
|
-
#
|
106
|
-
#
|
107
|
-
#
|
112
|
+
# - `yes`: the value can be converted to the target type with minimum coercion.
|
113
|
+
# - `maybe`: the value can be converted to the target type with some reasonable
|
114
|
+
# coercion.
|
115
|
+
# - `no`: the value cannot be converted to the target type.
|
108
116
|
#
|
109
|
-
#
|
117
|
+
# See implementation below for more details.
|
110
118
|
#
|
111
119
|
# @option state [Boolean, :strong] :strictness
|
112
120
|
#
|
@@ -141,9 +149,9 @@ module Orb
|
|
141
149
|
if value.is_a?(Integer)
|
142
150
|
exactness[:yes] += 1
|
143
151
|
return value
|
144
|
-
elsif strictness == :strong
|
152
|
+
elsif strictness == :strong && Integer(value, exception: false) != value
|
145
153
|
message = "no implicit conversion of #{value.class} into #{target.inspect}"
|
146
|
-
raise TypeError.new(message)
|
154
|
+
raise value.is_a?(Numeric) ? ArgumentError.new(message) : TypeError.new(message)
|
147
155
|
else
|
148
156
|
Kernel.then do
|
149
157
|
return Integer(value).tap { exactness[:maybe] += 1 }
|
@@ -183,18 +191,26 @@ module Orb
|
|
183
191
|
rescue ArgumentError, TypeError => e
|
184
192
|
raise e if strictness == :strong
|
185
193
|
end
|
186
|
-
in -> { _1 <=
|
194
|
+
in -> { _1 <= StringIO } if value.is_a?(String)
|
187
195
|
exactness[:yes] += 1
|
188
196
|
return StringIO.new(value.b)
|
189
197
|
else
|
190
198
|
end
|
191
199
|
in Symbol
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
200
|
+
case value
|
201
|
+
in Symbol | String
|
202
|
+
if value.to_sym == target
|
203
|
+
exactness[:yes] += 1
|
204
|
+
return target
|
205
|
+
else
|
206
|
+
exactness[:maybe] += 1
|
207
|
+
return value
|
208
|
+
end
|
209
|
+
else
|
210
|
+
if strictness == :strong
|
211
|
+
message = "cannot convert non-matching #{value.class} into #{target.inspect}"
|
212
|
+
raise ArgumentError.new(message)
|
213
|
+
end
|
198
214
|
end
|
199
215
|
else
|
200
216
|
end
|
@@ -208,17 +224,24 @@ module Orb
|
|
208
224
|
# @api private
|
209
225
|
#
|
210
226
|
# @param target [Orb::Internal::Type::Converter, Class]
|
227
|
+
#
|
211
228
|
# @param value [Object]
|
212
229
|
#
|
230
|
+
# @param state [Hash{Symbol=>Object}] .
|
231
|
+
#
|
232
|
+
# @option state [Boolean] :can_retry
|
233
|
+
#
|
213
234
|
# @return [Object]
|
214
|
-
def dump(target, value)
|
215
|
-
|
216
|
-
|
217
|
-
|
235
|
+
def dump(target, value, state: {can_retry: true})
|
236
|
+
case target
|
237
|
+
in Orb::Internal::Type::Converter
|
238
|
+
target.dump(value, state: state)
|
239
|
+
else
|
240
|
+
Orb::Internal::Type::Unknown.dump(value, state: state)
|
241
|
+
end
|
218
242
|
end
|
219
243
|
end
|
220
244
|
end
|
221
|
-
# rubocop:enable Metrics/ModuleLength
|
222
245
|
end
|
223
246
|
end
|
224
247
|
end
|
@@ -6,15 +6,15 @@ module Orb
|
|
6
6
|
# @api private
|
7
7
|
#
|
8
8
|
# A value from among a specified list of options. OpenAPI enum values map to Ruby
|
9
|
-
#
|
9
|
+
# values in the SDK as follows:
|
10
10
|
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
11
|
+
# 1. boolean => true | false
|
12
|
+
# 2. integer => Integer
|
13
|
+
# 3. float => Float
|
14
|
+
# 4. string => Symbol
|
15
15
|
#
|
16
|
-
#
|
17
|
-
#
|
16
|
+
# We can therefore convert string values to Symbols, but can't convert other
|
17
|
+
# values safely.
|
18
18
|
#
|
19
19
|
# @example
|
20
20
|
# # `billing_cycle_relative_date` is a `Orb::Models::BillingCycleRelativeDate`
|
@@ -66,7 +66,7 @@ module Orb
|
|
66
66
|
# @api private
|
67
67
|
#
|
68
68
|
# Unlike with primitives, `Enum` additionally validates that the value is a member
|
69
|
-
#
|
69
|
+
# of the enum.
|
70
70
|
#
|
71
71
|
# @param value [String, Symbol, Object]
|
72
72
|
#
|
@@ -97,8 +97,12 @@ module Orb
|
|
97
97
|
# #
|
98
98
|
# # @param value [Symbol, Object]
|
99
99
|
# #
|
100
|
+
# # @param state [Hash{Symbol=>Object}] .
|
101
|
+
# #
|
102
|
+
# # @option state [Boolean] :can_retry
|
103
|
+
# #
|
100
104
|
# # @return [Symbol, Object]
|
101
|
-
# def dump(value) = super
|
105
|
+
# def dump(value, state:) = super
|
102
106
|
end
|
103
107
|
end
|
104
108
|
end
|
@@ -99,12 +99,16 @@ module Orb
|
|
99
99
|
#
|
100
100
|
# @param value [Hash{Object=>Object}, Object]
|
101
101
|
#
|
102
|
+
# @param state [Hash{Symbol=>Object}] .
|
103
|
+
#
|
104
|
+
# @option state [Boolean] :can_retry
|
105
|
+
#
|
102
106
|
# @return [Hash{Symbol=>Object}, Object]
|
103
|
-
def dump(value)
|
107
|
+
def dump(value, state:)
|
104
108
|
target = item_type
|
105
109
|
if value.is_a?(Hash)
|
106
110
|
value.transform_values do
|
107
|
-
Orb::Internal::Type::Converter.dump(target, _1)
|
111
|
+
Orb::Internal::Type::Converter.dump(target, _1, state: state)
|
108
112
|
end
|
109
113
|
else
|
110
114
|
super
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Orb
|
4
|
+
module Internal
|
5
|
+
module Type
|
6
|
+
# @api private
|
7
|
+
#
|
8
|
+
# @abstract
|
9
|
+
#
|
10
|
+
# Either `Pathname` or `StringIO`.
|
11
|
+
class IOLike
|
12
|
+
extend Orb::Internal::Type::Converter
|
13
|
+
|
14
|
+
# @param other [Object]
|
15
|
+
#
|
16
|
+
# @return [Boolean]
|
17
|
+
def self.===(other)
|
18
|
+
case other
|
19
|
+
in StringIO | Pathname | IO
|
20
|
+
true
|
21
|
+
else
|
22
|
+
false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# @param other [Object]
|
27
|
+
#
|
28
|
+
# @return [Boolean]
|
29
|
+
def self.==(other) = other.is_a?(Class) && other <= Orb::Internal::Type::IOLike
|
30
|
+
|
31
|
+
class << self
|
32
|
+
# @api private
|
33
|
+
#
|
34
|
+
# @param value [StringIO, String, Object]
|
35
|
+
#
|
36
|
+
# @param state [Hash{Symbol=>Object}] .
|
37
|
+
#
|
38
|
+
# @option state [Boolean, :strong] :strictness
|
39
|
+
#
|
40
|
+
# @option state [Hash{Symbol=>Object}] :exactness
|
41
|
+
#
|
42
|
+
# @option state [Integer] :branched
|
43
|
+
#
|
44
|
+
# @return [StringIO, Object]
|
45
|
+
def coerce(value, state:)
|
46
|
+
exactness = state.fetch(:exactness)
|
47
|
+
case value
|
48
|
+
in String
|
49
|
+
exactness[:yes] += 1
|
50
|
+
StringIO.new(value)
|
51
|
+
in StringIO
|
52
|
+
exactness[:yes] += 1
|
53
|
+
value
|
54
|
+
else
|
55
|
+
exactness[:no] += 1
|
56
|
+
value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# @!parse
|
61
|
+
# # @api private
|
62
|
+
# #
|
63
|
+
# # @param value [Pathname, StringIO, IO, String, Object]
|
64
|
+
# #
|
65
|
+
# # @param state [Hash{Symbol=>Object}] .
|
66
|
+
# #
|
67
|
+
# # @option state [Boolean] :can_retry
|
68
|
+
# #
|
69
|
+
# # @return [Pathname, StringIO, IO, String, Object]
|
70
|
+
# def dump(value, state:) = super
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -26,9 +26,18 @@ module Orb
|
|
26
26
|
#
|
27
27
|
# @return [Array(Object, Hash{Symbol=>Object})]
|
28
28
|
def dump_request(params)
|
29
|
-
|
29
|
+
state = {can_retry: true}
|
30
|
+
case (dumped = dump(params, state: state))
|
30
31
|
in Hash
|
31
|
-
|
32
|
+
options = Orb::Internal::Util.coerce_hash(dumped[:request_options])
|
33
|
+
request_options =
|
34
|
+
case [options, state.fetch(:can_retry)]
|
35
|
+
in [Hash | nil, false]
|
36
|
+
{**options.to_h, max_retries: 0}
|
37
|
+
else
|
38
|
+
options
|
39
|
+
end
|
40
|
+
[dumped.except(:request_options), request_options]
|
32
41
|
else
|
33
42
|
[dumped, nil]
|
34
43
|
end
|
@@ -205,15 +205,19 @@ module Orb
|
|
205
205
|
#
|
206
206
|
# @param value [Object]
|
207
207
|
#
|
208
|
+
# @param state [Hash{Symbol=>Object}] .
|
209
|
+
#
|
210
|
+
# @option state [Boolean] :can_retry
|
211
|
+
#
|
208
212
|
# @return [Object]
|
209
|
-
def dump(value)
|
213
|
+
def dump(value, state:)
|
210
214
|
if (target = resolve_variant(value))
|
211
|
-
return Orb::Internal::Type::Converter.dump(target, value)
|
215
|
+
return Orb::Internal::Type::Converter.dump(target, value, state: state)
|
212
216
|
end
|
213
217
|
|
214
218
|
known_variants.each do
|
215
219
|
target = _2.call
|
216
|
-
return Orb::Internal::Type::Converter.dump(target, value) if target === value
|
220
|
+
return Orb::Internal::Type::Converter.dump(target, value, state: state) if target === value
|
217
221
|
end
|
218
222
|
|
219
223
|
super
|