orb-billing 0.3.2 → 0.4.0

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.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +1 -1
  4. data/lib/orb/errors.rb +1 -1
  5. data/lib/orb/internal/transport/base_client.rb +74 -5
  6. data/lib/orb/internal/transport/pooled_net_requester.rb +14 -0
  7. data/lib/orb/internal/type/array_of.rb +1 -1
  8. data/lib/orb/internal/type/base_model.rb +62 -30
  9. data/lib/orb/internal/type/converter.rb +18 -0
  10. data/lib/orb/internal/type/enum.rb +1 -0
  11. data/lib/orb/internal/type/hash_of.rb +1 -1
  12. data/lib/orb/internal/type/union.rb +1 -0
  13. data/lib/orb/internal/util.rb +56 -0
  14. data/lib/orb/internal.rb +6 -0
  15. data/lib/orb/models/coupon.rb +4 -0
  16. data/lib/orb/models/coupon_create_params.rb +6 -0
  17. data/lib/orb/models/customer_create_params.rb +9 -0
  18. data/lib/orb/models/customer_update_by_external_id_params.rb +9 -0
  19. data/lib/orb/models/customer_update_params.rb +9 -0
  20. data/lib/orb/models/customers/credits/ledger_create_entry_by_external_id_response.rb +14 -0
  21. data/lib/orb/models/customers/credits/ledger_create_entry_response.rb +14 -0
  22. data/lib/orb/models/customers/credits/ledger_list_by_external_id_response.rb +14 -0
  23. data/lib/orb/models/customers/credits/ledger_list_response.rb +14 -0
  24. data/lib/orb/models/discount.rb +6 -0
  25. data/lib/orb/models/evaluate_price_group.rb +4 -0
  26. data/lib/orb/models/invoice.rb +22 -0
  27. data/lib/orb/models/invoice_fetch_upcoming_response.rb +22 -0
  28. data/lib/orb/models/invoice_level_discount.rb +4 -0
  29. data/lib/orb/models/invoice_line_item_create_response.rb +22 -0
  30. data/lib/orb/models/plan.rb +12 -0
  31. data/lib/orb/models/plan_create_params.rb +32 -0
  32. data/lib/orb/models/price.rb +35 -0
  33. data/lib/orb/models/subscription.rb +22 -0
  34. data/lib/orb/models/subscription_cancel_response.rb +22 -0
  35. data/lib/orb/models/subscription_change_apply_response.rb +22 -0
  36. data/lib/orb/models/subscription_change_cancel_response.rb +22 -0
  37. data/lib/orb/models/subscription_change_retrieve_response.rb +22 -0
  38. data/lib/orb/models/subscription_create_params.rb +88 -0
  39. data/lib/orb/models/subscription_create_response.rb +22 -0
  40. data/lib/orb/models/subscription_price_intervals_params.rb +89 -0
  41. data/lib/orb/models/subscription_price_intervals_response.rb +22 -0
  42. data/lib/orb/models/subscription_schedule_plan_change_params.rb +88 -0
  43. data/lib/orb/models/subscription_schedule_plan_change_response.rb +22 -0
  44. data/lib/orb/models/subscription_trigger_phase_response.rb +22 -0
  45. data/lib/orb/models/subscription_unschedule_cancellation_response.rb +22 -0
  46. data/lib/orb/models/subscription_unschedule_fixed_fee_quantity_updates_response.rb +22 -0
  47. data/lib/orb/models/subscription_unschedule_pending_plan_changes_response.rb +22 -0
  48. data/lib/orb/models/subscription_update_fixed_fee_quantity_response.rb +22 -0
  49. data/lib/orb/models/subscription_update_trial_params.rb +4 -0
  50. data/lib/orb/models/subscription_update_trial_response.rb +22 -0
  51. data/lib/orb/models/subscription_usage.rb +9 -0
  52. data/lib/orb/models.rb +24 -0
  53. data/lib/orb/request_options.rb +4 -0
  54. data/lib/orb/version.rb +1 -1
  55. data/lib/orb.rb +2 -0
  56. data/rbi/orb/internal/page.rbi +2 -1
  57. data/rbi/orb/internal/transport/base_client.rbi +31 -8
  58. data/rbi/orb/internal/transport/pooled_net_requester.rbi +5 -4
  59. data/rbi/orb/internal/type/base_model.rbi +31 -15
  60. data/rbi/orb/internal/type/base_page.rbi +1 -1
  61. data/rbi/orb/internal/type/converter.rbi +2 -0
  62. data/rbi/orb/internal/type/enum.rbi +1 -0
  63. data/rbi/orb/internal/type/union.rbi +1 -0
  64. data/rbi/orb/internal/util.rbi +28 -7
  65. data/rbi/orb/internal.rbi +2 -0
  66. data/rbi/orb/models/alert.rbi +13 -6
  67. data/rbi/orb/models/alert_create_for_customer_params.rbi +11 -2
  68. data/rbi/orb/models/alert_create_for_external_customer_params.rbi +14 -2
  69. data/rbi/orb/models/alert_create_for_subscription_params.rbi +11 -2
  70. data/rbi/orb/models/alert_disable_params.rbi +2 -1
  71. data/rbi/orb/models/alert_enable_params.rbi +2 -1
  72. data/rbi/orb/models/alert_list_params.rbi +2 -1
  73. data/rbi/orb/models/alert_retrieve_params.rbi +2 -1
  74. data/rbi/orb/models/alert_update_params.rbi +6 -2
  75. data/rbi/orb/models/amount_discount.rbi +2 -1
  76. data/rbi/orb/models/billable_metric.rbi +2 -1
  77. data/rbi/orb/models/coupon.rbi +1 -1
  78. data/rbi/orb/models/coupon_archive_params.rbi +2 -1
  79. data/rbi/orb/models/coupon_create_params.rbi +16 -3
  80. data/rbi/orb/models/coupon_fetch_params.rbi +2 -1
  81. data/rbi/orb/models/coupon_list_params.rbi +2 -1
  82. data/rbi/orb/models/coupons/subscription_list_params.rbi +4 -1
  83. data/rbi/orb/models/credit_note.rbi +45 -9
  84. data/rbi/orb/models/credit_note_create_params.rbi +8 -2
  85. data/rbi/orb/models/credit_note_fetch_params.rbi +4 -1
  86. data/rbi/orb/models/credit_note_list_params.rbi +4 -1
  87. data/rbi/orb/models/customer.rbi +41 -10
  88. data/rbi/orb/models/customer_create_params.rbi +61 -10
  89. data/rbi/orb/models/customer_delete_params.rbi +4 -1
  90. data/rbi/orb/models/customer_fetch_by_external_id_params.rbi +4 -1
  91. data/rbi/orb/models/customer_fetch_params.rbi +2 -1
  92. data/rbi/orb/models/customer_list_params.rbi +2 -1
  93. data/rbi/orb/models/customer_sync_payment_methods_from_gateway_by_external_customer_id_params.rbi +7 -1
  94. data/rbi/orb/models/customer_sync_payment_methods_from_gateway_params.rbi +7 -1
  95. data/rbi/orb/models/customer_update_by_external_id_params.rbi +67 -10
  96. data/rbi/orb/models/customer_update_params.rbi +61 -10
  97. data/rbi/orb/models/customers/balance_transaction_create_params.rbi +7 -1
  98. data/rbi/orb/models/customers/balance_transaction_create_response.rbi +21 -3
  99. data/rbi/orb/models/customers/balance_transaction_list_params.rbi +7 -1
  100. data/rbi/orb/models/customers/balance_transaction_list_response.rbi +21 -3
  101. data/rbi/orb/models/customers/cost_list_by_external_id_params.rbi +7 -1
  102. data/rbi/orb/models/customers/cost_list_by_external_id_response.rbi +21 -3
  103. data/rbi/orb/models/customers/cost_list_params.rbi +4 -1
  104. data/rbi/orb/models/customers/cost_list_response.rbi +21 -3
  105. data/rbi/orb/models/customers/credit_list_by_external_id_params.rbi +7 -1
  106. data/rbi/orb/models/customers/credit_list_by_external_id_response.rbi +7 -1
  107. data/rbi/orb/models/customers/credit_list_params.rbi +4 -1
  108. data/rbi/orb/models/customers/credit_list_response.rbi +7 -1
  109. data/rbi/orb/models/customers/credits/ledger_create_entry_by_external_id_params.rbi +14 -2
  110. data/rbi/orb/models/customers/credits/ledger_create_entry_by_external_id_response.rbi +133 -21
  111. data/rbi/orb/models/customers/credits/ledger_create_entry_params.rbi +14 -2
  112. data/rbi/orb/models/customers/credits/ledger_create_entry_response.rbi +133 -21
  113. data/rbi/orb/models/customers/credits/ledger_list_by_external_id_params.rbi +7 -1
  114. data/rbi/orb/models/customers/credits/ledger_list_by_external_id_response.rbi +133 -21
  115. data/rbi/orb/models/customers/credits/ledger_list_params.rbi +7 -1
  116. data/rbi/orb/models/customers/credits/ledger_list_response.rbi +133 -21
  117. data/rbi/orb/models/customers/credits/top_up_create_by_external_id_params.rbi +14 -2
  118. data/rbi/orb/models/customers/credits/top_up_create_by_external_id_response.rbi +14 -2
  119. data/rbi/orb/models/customers/credits/top_up_create_params.rbi +14 -2
  120. data/rbi/orb/models/customers/credits/top_up_create_response.rbi +14 -2
  121. data/rbi/orb/models/customers/credits/top_up_delete_by_external_id_params.rbi +7 -1
  122. data/rbi/orb/models/customers/credits/top_up_delete_params.rbi +7 -1
  123. data/rbi/orb/models/customers/credits/top_up_list_by_external_id_params.rbi +7 -1
  124. data/rbi/orb/models/customers/credits/top_up_list_by_external_id_response.rbi +14 -2
  125. data/rbi/orb/models/customers/credits/top_up_list_params.rbi +7 -1
  126. data/rbi/orb/models/customers/credits/top_up_list_response.rbi +14 -2
  127. data/rbi/orb/models/dimensional_price_group.rbi +4 -1
  128. data/rbi/orb/models/dimensional_price_group_create_params.rbi +4 -1
  129. data/rbi/orb/models/dimensional_price_group_list_params.rbi +4 -1
  130. data/rbi/orb/models/dimensional_price_group_retrieve_params.rbi +7 -1
  131. data/rbi/orb/models/dimensional_price_groups/external_dimensional_price_group_id_retrieve_params.rbi +7 -1
  132. data/rbi/orb/models/dimensional_price_groups.rbi +4 -1
  133. data/rbi/orb/models/evaluate_price_group.rbi +2 -1
  134. data/rbi/orb/models/event_deprecate_params.rbi +4 -1
  135. data/rbi/orb/models/event_deprecate_response.rbi +4 -1
  136. data/rbi/orb/models/event_ingest_params.rbi +6 -2
  137. data/rbi/orb/models/event_ingest_response.rbi +18 -3
  138. data/rbi/orb/models/event_search_params.rbi +2 -1
  139. data/rbi/orb/models/event_search_response.rbi +11 -2
  140. data/rbi/orb/models/event_update_params.rbi +2 -1
  141. data/rbi/orb/models/event_update_response.rbi +4 -1
  142. data/rbi/orb/models/events/backfill_close_params.rbi +4 -1
  143. data/rbi/orb/models/events/backfill_close_response.rbi +7 -1
  144. data/rbi/orb/models/events/backfill_create_params.rbi +4 -1
  145. data/rbi/orb/models/events/backfill_create_response.rbi +7 -1
  146. data/rbi/orb/models/events/backfill_fetch_params.rbi +4 -1
  147. data/rbi/orb/models/events/backfill_fetch_response.rbi +7 -1
  148. data/rbi/orb/models/events/backfill_list_params.rbi +4 -1
  149. data/rbi/orb/models/events/backfill_list_response.rbi +7 -1
  150. data/rbi/orb/models/events/backfill_revert_params.rbi +4 -1
  151. data/rbi/orb/models/events/backfill_revert_response.rbi +7 -1
  152. data/rbi/orb/models/events/event_volumes.rbi +8 -2
  153. data/rbi/orb/models/events/volume_list_params.rbi +4 -1
  154. data/rbi/orb/models/invoice.rbi +156 -31
  155. data/rbi/orb/models/invoice_create_params.rbi +13 -3
  156. data/rbi/orb/models/invoice_fetch_params.rbi +2 -1
  157. data/rbi/orb/models/invoice_fetch_upcoming_params.rbi +4 -1
  158. data/rbi/orb/models/invoice_fetch_upcoming_response.rbi +212 -31
  159. data/rbi/orb/models/invoice_issue_params.rbi +2 -1
  160. data/rbi/orb/models/invoice_line_item_create_params.rbi +4 -1
  161. data/rbi/orb/models/invoice_line_item_create_response.rbi +119 -17
  162. data/rbi/orb/models/invoice_list_params.rbi +2 -1
  163. data/rbi/orb/models/invoice_mark_paid_params.rbi +4 -1
  164. data/rbi/orb/models/invoice_pay_params.rbi +2 -1
  165. data/rbi/orb/models/invoice_update_params.rbi +2 -1
  166. data/rbi/orb/models/invoice_void_params.rbi +2 -1
  167. data/rbi/orb/models/item.rbi +5 -2
  168. data/rbi/orb/models/item_create_params.rbi +2 -1
  169. data/rbi/orb/models/item_fetch_params.rbi +2 -1
  170. data/rbi/orb/models/item_list_params.rbi +2 -1
  171. data/rbi/orb/models/item_update_params.rbi +9 -2
  172. data/rbi/orb/models/metric_create_params.rbi +2 -1
  173. data/rbi/orb/models/metric_fetch_params.rbi +2 -1
  174. data/rbi/orb/models/metric_list_params.rbi +2 -1
  175. data/rbi/orb/models/metric_update_params.rbi +2 -1
  176. data/rbi/orb/models/pagination_metadata.rbi +2 -1
  177. data/rbi/orb/models/percentage_discount.rbi +2 -1
  178. data/rbi/orb/models/plan.rbi +50 -14
  179. data/rbi/orb/models/plan_create_params.rbi +604 -89
  180. data/rbi/orb/models/plan_fetch_params.rbi +2 -1
  181. data/rbi/orb/models/plan_list_params.rbi +2 -1
  182. data/rbi/orb/models/plan_update_params.rbi +2 -1
  183. data/rbi/orb/models/plans/external_plan_id_fetch_params.rbi +4 -1
  184. data/rbi/orb/models/plans/external_plan_id_update_params.rbi +7 -1
  185. data/rbi/orb/models/price.rbi +1624 -270
  186. data/rbi/orb/models/price_create_params.rbi +100 -18
  187. data/rbi/orb/models/price_evaluate_params.rbi +2 -1
  188. data/rbi/orb/models/price_evaluate_response.rbi +4 -1
  189. data/rbi/orb/models/price_fetch_params.rbi +2 -1
  190. data/rbi/orb/models/price_list_params.rbi +2 -1
  191. data/rbi/orb/models/price_update_params.rbi +2 -1
  192. data/rbi/orb/models/prices/external_price_id_fetch_params.rbi +7 -1
  193. data/rbi/orb/models/prices/external_price_id_update_params.rbi +7 -1
  194. data/rbi/orb/models/subscription.rbi +109 -19
  195. data/rbi/orb/models/subscription_cancel_params.rbi +4 -1
  196. data/rbi/orb/models/subscription_cancel_response.rbi +137 -20
  197. data/rbi/orb/models/subscription_change_apply_params.rbi +4 -1
  198. data/rbi/orb/models/subscription_change_apply_response.rbi +142 -21
  199. data/rbi/orb/models/subscription_change_cancel_params.rbi +4 -1
  200. data/rbi/orb/models/subscription_change_cancel_response.rbi +142 -21
  201. data/rbi/orb/models/subscription_change_retrieve_params.rbi +4 -1
  202. data/rbi/orb/models/subscription_change_retrieve_response.rbi +142 -21
  203. data/rbi/orb/models/subscription_create_params.rbi +1257 -198
  204. data/rbi/orb/models/subscription_create_response.rbi +137 -20
  205. data/rbi/orb/models/subscription_fetch_costs_params.rbi +4 -1
  206. data/rbi/orb/models/subscription_fetch_costs_response.rbi +21 -3
  207. data/rbi/orb/models/subscription_fetch_params.rbi +4 -1
  208. data/rbi/orb/models/subscription_fetch_schedule_params.rbi +4 -1
  209. data/rbi/orb/models/subscription_fetch_schedule_response.rbi +14 -2
  210. data/rbi/orb/models/subscription_fetch_usage_params.rbi +4 -1
  211. data/rbi/orb/models/subscription_list_params.rbi +4 -1
  212. data/rbi/orb/models/subscription_price_intervals_params.rbi +731 -115
  213. data/rbi/orb/models/subscription_price_intervals_response.rbi +140 -20
  214. data/rbi/orb/models/subscription_schedule_plan_change_params.rbi +1260 -198
  215. data/rbi/orb/models/subscription_schedule_plan_change_response.rbi +140 -20
  216. data/rbi/orb/models/subscription_trigger_phase_params.rbi +4 -1
  217. data/rbi/orb/models/subscription_trigger_phase_response.rbi +140 -20
  218. data/rbi/orb/models/subscription_unschedule_cancellation_params.rbi +7 -1
  219. data/rbi/orb/models/subscription_unschedule_cancellation_response.rbi +140 -20
  220. data/rbi/orb/models/subscription_unschedule_fixed_fee_quantity_updates_params.rbi +7 -1
  221. data/rbi/orb/models/subscription_unschedule_fixed_fee_quantity_updates_response.rbi +140 -20
  222. data/rbi/orb/models/subscription_unschedule_pending_plan_changes_params.rbi +7 -1
  223. data/rbi/orb/models/subscription_unschedule_pending_plan_changes_response.rbi +140 -20
  224. data/rbi/orb/models/subscription_update_fixed_fee_quantity_params.rbi +7 -1
  225. data/rbi/orb/models/subscription_update_fixed_fee_quantity_response.rbi +140 -20
  226. data/rbi/orb/models/subscription_update_params.rbi +4 -1
  227. data/rbi/orb/models/subscription_update_trial_params.rbi +4 -1
  228. data/rbi/orb/models/subscription_update_trial_response.rbi +140 -20
  229. data/rbi/orb/models/subscription_usage.rbi +63 -9
  230. data/rbi/orb/models/subscriptions.rbi +2 -1
  231. data/rbi/orb/models/top_level_ping_params.rbi +2 -1
  232. data/rbi/orb/models/top_level_ping_response.rbi +4 -1
  233. data/rbi/orb/models/trial_discount.rbi +2 -1
  234. data/rbi/orb/models/usage_discount.rbi +2 -1
  235. data/rbi/orb/request_options.rbi +1 -1
  236. data/sig/orb/internal/transport/base_client.rbs +16 -1
  237. data/sig/orb/internal/transport/pooled_net_requester.rbs +2 -0
  238. data/sig/orb/internal/type/base_model.rbs +11 -5
  239. data/sig/orb/internal/type/base_page.rbs +1 -1
  240. data/sig/orb/internal/type/converter.rbs +2 -0
  241. data/sig/orb/internal/type/enum.rbs +1 -0
  242. data/sig/orb/internal/type/union.rbs +1 -0
  243. data/sig/orb/internal/util.rbs +13 -0
  244. data/sig/orb/internal.rbs +2 -0
  245. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a8aab7ea27e9f429fb79d85663cb238393ef06c60acb43e7c1f4285658cdd2f
4
- data.tar.gz: b48c4f83c56e09e04e50e10bb89c865c5fb72143f4a42dbd96e83cc183975fa8
3
+ metadata.gz: 38b3bf74b4e8dd32bd70721c88a432e1700d34742b5435fb1f623124f9d69aae
4
+ data.tar.gz: 67304b3d1242e85d48a26dd2a108cdac385698fba02c7d6109d850836bb71b91
5
5
  SHA512:
6
- metadata.gz: a5e2ba15a48f4b458f9758393a6f421d4b795e44b3ecf5f7f7e7dfdba71c139b26a229cd4956d2d4269d1f5df689e9fc583ced8da055ab59403f0372b24ed1d4
7
- data.tar.gz: ca4923f45449e5f4187ad9bd4cabf2abbdea4c2e593f2f294607e1e2cf8ce5efe3e2f311ee2371a85cbf4ceba724fa2de98d30d9521fa8f10f9262214fd52a54
6
+ metadata.gz: 4d6cdb145141d9b8c1cc43175bb784b1b07288414147c0e8c9eaf36a4928e5c13e0f610c8a16282774c42c5706272b52a78babd80e4ae973dc873c47709be06c
7
+ data.tar.gz: 3fa6dd7dd0f921f286993942bb61621d646c8462110ec2a02628aae0eb8a1db9ff3f1fbefd818b4612c3827eaf240b732989a9be008270830388704d5a6bdd30
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.0 (2025-05-13)
4
+
5
+ Full Changelog: [v0.3.2...v0.4.0](https://github.com/orbcorp/orb-ruby/compare/v0.3.2...v0.4.0)
6
+
7
+ ### Features
8
+
9
+ * expose base client options as read only attributes ([1f638b6](https://github.com/orbcorp/orb-ruby/commit/1f638b60ad1679bc7969f441650ba61fb9a65e8a))
10
+ * expose recursive `#to_h` conversion ([cfd49a1](https://github.com/orbcorp/orb-ruby/commit/cfd49a15d805ffaa5828249c5b91565661ae7e52))
11
+ * support sorbet aliases at the runtime ([786d1e3](https://github.com/orbcorp/orb-ruby/commit/786d1e3dd882054bd298e33a448a194f1d68bac4))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * **internal:** update gemspec name ([852ab56](https://github.com/orbcorp/orb-ruby/commit/852ab562ee4948d3fe4de8dd877f9301f36c8a4b))
17
+
18
+
19
+ ### Chores
20
+
21
+ * fix misc linting / minor issues ([0e7dd84](https://github.com/orbcorp/orb-ruby/commit/0e7dd846c906cc2e72827f5477a93e4799ab9482))
22
+ * **internal:** version bump ([359839c](https://github.com/orbcorp/orb-ruby/commit/359839c734c4bcf8051490b1e8723674ef634753))
23
+
3
24
  ## 0.3.2 (2025-05-07)
4
25
 
5
26
  Full Changelog: [v0.3.1...v0.3.2](https://github.com/orbcorp/orb-ruby/compare/v0.3.1...v0.3.2)
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.3.2"
18
+ gem "orb-billing", "~> 0.4.0"
19
19
  ```
20
20
 
21
21
  <!-- x-release-please-end -->
data/lib/orb/errors.rb CHANGED
@@ -99,7 +99,7 @@ module Orb
99
99
  # @param response [nil]
100
100
  # @param message [String, nil]
101
101
  #
102
- # @return [Orb::Errors::APIStatusError]
102
+ # @return [self]
103
103
  def self.for(url:, status:, body:, request:, response:, message: nil)
104
104
  key = Orb::Internal::Util.dig(body, :type)
105
105
  kwargs = {
@@ -7,6 +7,8 @@ module Orb
7
7
  #
8
8
  # @abstract
9
9
  class BaseClient
10
+ extend Orb::Internal::Util::SorbetRuntimeSupport
11
+
10
12
  # from whatwg fetch spec
11
13
  MAX_REDIRECTS = 20
12
14
 
@@ -151,6 +153,27 @@ module Orb
151
153
  end
152
154
  end
153
155
 
156
+ # @return [URI::Generic]
157
+ attr_reader :base_url
158
+
159
+ # @return [Float]
160
+ attr_reader :timeout
161
+
162
+ # @return [Integer]
163
+ attr_reader :max_retries
164
+
165
+ # @return [Float]
166
+ attr_reader :initial_retry_delay
167
+
168
+ # @return [Float]
169
+ attr_reader :max_retry_delay
170
+
171
+ # @return [Hash{String=>String}]
172
+ attr_reader :headers
173
+
174
+ # @return [String, nil]
175
+ attr_reader :idempotency_header
176
+
154
177
  # @api private
155
178
  # @return [Orb::Internal::Transport::PooledNetRequester]
156
179
  attr_reader :requester
@@ -182,10 +205,11 @@ module Orb
182
205
  },
183
206
  headers
184
207
  )
185
- @base_url = Orb::Internal::Util.parse_uri(base_url)
208
+ @base_url_components = Orb::Internal::Util.parse_uri(base_url)
209
+ @base_url = Orb::Internal::Util.unparse_uri(@base_url_components)
186
210
  @idempotency_header = idempotency_header&.to_s&.downcase
187
- @max_retries = max_retries
188
211
  @timeout = timeout
212
+ @max_retries = max_retries
189
213
  @initial_retry_delay = initial_retry_delay
190
214
  @max_retry_delay = max_retry_delay
191
215
  end
@@ -276,10 +300,11 @@ module Orb
276
300
  Orb::Internal::Util.deep_merge(*[req[:body], opts[:extra_body]].compact)
277
301
  end
278
302
 
303
+ url = Orb::Internal::Util.join_parsed_uri(@base_url_components, {**req, path: path, query: query})
279
304
  headers, encoded = Orb::Internal::Util.encode_content(headers, body)
280
305
  {
281
306
  method: method,
282
- url: Orb::Internal::Util.join_parsed_uri(@base_url, {**req, path: path, query: query}),
307
+ url: url,
283
308
  headers: headers,
284
309
  body: encoded,
285
310
  max_retries: opts.fetch(:max_retries, @max_retries),
@@ -473,10 +498,54 @@ module Orb
473
498
  # @return [String]
474
499
  def inspect
475
500
  # rubocop:disable Layout/LineLength
476
- base_url = Orb::Internal::Util.unparse_uri(@base_url)
477
- "#<#{self.class.name}:0x#{object_id.to_s(16)} base_url=#{base_url} max_retries=#{@max_retries} timeout=#{@timeout}>"
501
+ "#<#{self.class.name}:0x#{object_id.to_s(16)} base_url=#{@base_url} max_retries=#{@max_retries} timeout=#{@timeout}>"
478
502
  # rubocop:enable Layout/LineLength
479
503
  end
504
+
505
+ define_sorbet_constant!(:RequestComponents) do
506
+ T.type_alias do
507
+ {
508
+ method: Symbol,
509
+ path: T.any(String, T::Array[String]),
510
+ query: T.nilable(T::Hash[String, T.nilable(T.any(T::Array[String], String))]),
511
+ headers: T.nilable(
512
+ T::Hash[String,
513
+ T.nilable(
514
+ T.any(
515
+ String,
516
+ Integer,
517
+ T::Array[T.nilable(T.any(String, Integer))]
518
+ )
519
+ )]
520
+ ),
521
+ body: T.nilable(T.anything),
522
+ unwrap: T.nilable(
523
+ T.any(
524
+ Symbol,
525
+ Integer,
526
+ T::Array[T.any(Symbol, Integer)],
527
+ T.proc.params(arg0: T.anything).returns(T.anything)
528
+ )
529
+ ),
530
+ page: T.nilable(T::Class[Orb::Internal::Type::BasePage[Orb::Internal::Type::BaseModel]]),
531
+ stream: T.nilable(T::Class[T.anything]),
532
+ model: T.nilable(Orb::Internal::Type::Converter::Input),
533
+ options: T.nilable(Orb::RequestOptions::OrHash)
534
+ }
535
+ end
536
+ end
537
+ define_sorbet_constant!(:RequestInput) do
538
+ T.type_alias do
539
+ {
540
+ method: Symbol,
541
+ url: URI::Generic,
542
+ headers: T::Hash[String, String],
543
+ body: T.anything,
544
+ max_retries: Integer,
545
+ timeout: Float
546
+ }
547
+ end
548
+ end
480
549
  end
481
550
  end
482
551
  end
@@ -5,6 +5,8 @@ module Orb
5
5
  module Transport
6
6
  # @api private
7
7
  class PooledNetRequester
8
+ extend Orb::Internal::Util::SorbetRuntimeSupport
9
+
8
10
  # from the golang stdlib
9
11
  # https://github.com/golang/go/blob/c8eced8580028328fde7c03cbfcb720ce15b2358/src/net/http/transport.go#L49
10
12
  KEEP_ALIVE_TIMEOUT = 30
@@ -187,6 +189,18 @@ module Orb
187
189
  @size = size
188
190
  @pools = {}
189
191
  end
192
+
193
+ define_sorbet_constant!(:Request) do
194
+ T.type_alias do
195
+ {
196
+ method: Symbol,
197
+ url: URI::Generic,
198
+ headers: T::Hash[String, String],
199
+ body: T.anything,
200
+ deadline: Float
201
+ }
202
+ end
203
+ end
190
204
  end
191
205
  end
192
206
  end
@@ -29,7 +29,7 @@ module Orb
29
29
  #
30
30
  # @option spec [Boolean] :"nil?"
31
31
  #
32
- # @return [Orb::Internal::Type::ArrayOf]
32
+ # @return [self]
33
33
  def self.[](...) = new(...)
34
34
 
35
35
  # @api public
@@ -6,6 +6,7 @@ module Orb
6
6
  # @abstract
7
7
  class BaseModel
8
8
  extend Orb::Internal::Type::Converter
9
+ extend Orb::Internal::Util::SorbetRuntimeSupport
9
10
 
10
11
  class << self
11
12
  # @api private
@@ -13,11 +14,17 @@ module Orb
13
14
  # Assumes superclass fields are totally defined before fields are accessed /
14
15
  # defined on subclasses.
15
16
  #
16
- # @return [Hash{Symbol=>Hash{Symbol=>Object}}]
17
- def known_fields
18
- @known_fields ||= (self < Orb::Internal::Type::BaseModel ? superclass.known_fields.dup : {})
17
+ # @param child [Class<Orb::Internal::Type::BaseModel>]
18
+ def inherited(child)
19
+ super
20
+ child.known_fields.replace(known_fields.dup)
19
21
  end
20
22
 
23
+ # @api private
24
+ #
25
+ # @return [Hash{Symbol=>Hash{Symbol=>Object}}]
26
+ def known_fields = @known_fields ||= {}
27
+
21
28
  # @api private
22
29
  #
23
30
  # @return [Hash{Symbol=>Hash{Symbol=>Object}}]
@@ -199,7 +206,7 @@ module Orb
199
206
  #
200
207
  # @option state [Integer] :branched
201
208
  #
202
- # @return [Orb::Internal::Type::BaseModel, Object]
209
+ # @return [self, Object]
203
210
  def coerce(value, state:)
204
211
  exactness = state.fetch(:exactness)
205
212
 
@@ -258,7 +265,7 @@ module Orb
258
265
 
259
266
  # @api private
260
267
  #
261
- # @param value [Orb::Internal::Type::BaseModel, Object]
268
+ # @param value [self, Object]
262
269
  #
263
270
  # @param state [Hash{Symbol=>Object}] .
264
271
  #
@@ -299,6 +306,39 @@ module Orb
299
306
  end
300
307
  end
301
308
 
309
+ class << self
310
+ # @api private
311
+ #
312
+ # @param model [Orb::Internal::Type::BaseModel]
313
+ # @param convert [Boolean]
314
+ #
315
+ # @return [Hash{Symbol=>Object}]
316
+ def recursively_to_h(model, convert:)
317
+ rec = ->(x) do
318
+ case x
319
+ in Orb::Internal::Type::BaseModel
320
+ if convert
321
+ fields = x.class.known_fields
322
+ x.to_h.to_h do |key, val|
323
+ [key, rec.call(fields.key?(key) ? x.public_send(key) : val)]
324
+ rescue Orb::Errors::ConversionError
325
+ [key, rec.call(val)]
326
+ end
327
+ else
328
+ rec.call(x.to_h)
329
+ end
330
+ in Hash
331
+ x.transform_values(&rec)
332
+ in Array
333
+ x.map(&rec)
334
+ else
335
+ x
336
+ end
337
+ end
338
+ rec.call(model)
339
+ end
340
+ end
341
+
302
342
  # @api public
303
343
  #
304
344
  # Returns the raw value associated with the given key, if found. Otherwise, nil is
@@ -335,6 +375,14 @@ module Orb
335
375
 
336
376
  alias_method :to_hash, :to_h
337
377
 
378
+ # @api public
379
+ #
380
+ # In addition to the behaviour of `#to_h`, this method will recursively call
381
+ # `#to_h` on nested models.
382
+ #
383
+ # @return [Hash{Symbol=>Object}]
384
+ def deep_to_h = self.class.recursively_to_h(@data, convert: false)
385
+
338
386
  # @param keys [Array<Symbol>, nil]
339
387
  #
340
388
  # @return [Hash{Symbol=>Object}]
@@ -350,29 +398,6 @@ module Orb
350
398
  .to_h
351
399
  end
352
400
 
353
- class << self
354
- # @api private
355
- #
356
- # @param model [Orb::Internal::Type::BaseModel]
357
- #
358
- # @return [Hash{Symbol=>Object}]
359
- def walk(model)
360
- walk = ->(x) do
361
- case x
362
- in Orb::Internal::Type::BaseModel
363
- walk.call(x.to_h)
364
- in Hash
365
- x.transform_values(&walk)
366
- in Array
367
- x.map(&walk)
368
- else
369
- x
370
- end
371
- end
372
- walk.call(model)
373
- end
374
- end
375
-
376
401
  # @api public
377
402
  #
378
403
  # @param a [Object]
@@ -418,12 +443,19 @@ module Orb
418
443
  # @api public
419
444
  #
420
445
  # @return [String]
421
- def to_s = self.class.walk(@data).to_s
446
+ def to_s = deep_to_h.to_s
422
447
 
423
448
  # @api private
424
449
  #
425
450
  # @return [String]
426
- def inspect = "#<#{self.class}:0x#{object_id.to_s(16)} #{self}>"
451
+ def inspect
452
+ converted = self.class.recursively_to_h(self, convert: true)
453
+ "#<#{self.class}:0x#{object_id.to_s(16)} #{converted}>"
454
+ end
455
+
456
+ define_sorbet_constant!(:KnownField) do
457
+ T.type_alias { {mode: T.nilable(Symbol), required: T::Boolean, nilable: T::Boolean} }
458
+ end
427
459
  end
428
460
  end
429
461
  end
@@ -5,6 +5,8 @@ module Orb
5
5
  module Type
6
6
  # @api private
7
7
  module Converter
8
+ extend Orb::Internal::Util::SorbetRuntimeSupport
9
+
8
10
  # rubocop:disable Lint/UnusedMethodArgument
9
11
 
10
12
  # @api private
@@ -268,6 +270,22 @@ module Orb
268
270
  end
269
271
  end
270
272
  end
273
+
274
+ define_sorbet_constant!(:Input) do
275
+ T.type_alias { T.any(Orb::Internal::Type::Converter, T::Class[T.anything]) }
276
+ end
277
+ define_sorbet_constant!(:CoerceState) do
278
+ T.type_alias do
279
+ {
280
+ strictness: T.any(T::Boolean, Symbol),
281
+ exactness: {yes: Integer, no: Integer, maybe: Integer},
282
+ branched: Integer
283
+ }
284
+ end
285
+ end
286
+ define_sorbet_constant!(:DumpState) do
287
+ T.type_alias { {can_retry: T::Boolean} }
288
+ end
271
289
  end
272
290
  end
273
291
  end
@@ -38,6 +38,7 @@ module Orb
38
38
  # end
39
39
  module Enum
40
40
  include Orb::Internal::Type::Converter
41
+ include Orb::Internal::Util::SorbetRuntimeSupport
41
42
 
42
43
  # All of the valid Symbol values for this enum.
43
44
  #
@@ -29,7 +29,7 @@ module Orb
29
29
  #
30
30
  # @option spec [Boolean] :"nil?"
31
31
  #
32
- # @return [Orb::Internal::Type::HashOf]
32
+ # @return [self]
33
33
  def self.[](...) = new(...)
34
34
 
35
35
  # @api public
@@ -46,6 +46,7 @@ module Orb
46
46
  # end
47
47
  module Union
48
48
  include Orb::Internal::Type::Converter
49
+ include Orb::Internal::Util::SorbetRuntimeSupport
49
50
 
50
51
  # @api private
51
52
  #
@@ -801,6 +801,62 @@ module Orb
801
801
  end
802
802
  end
803
803
  end
804
+
805
+ # @api private
806
+ module SorbetRuntimeSupport
807
+ class MissingSorbetRuntimeError < ::RuntimeError
808
+ end
809
+
810
+ # @api private
811
+ #
812
+ # @return [Hash{Symbol=>Object}]
813
+ private def sorbet_runtime_constants = @sorbet_runtime_constants ||= {}
814
+
815
+ # @api private
816
+ #
817
+ # @param name [Symbol]
818
+ def const_missing(name)
819
+ super unless sorbet_runtime_constants.key?(name)
820
+
821
+ unless Object.const_defined?(:T)
822
+ message = "Trying to access a Sorbet constant #{name.inspect} without `sorbet-runtime`."
823
+ raise MissingSorbetRuntimeError.new(message)
824
+ end
825
+
826
+ sorbet_runtime_constants.fetch(name).call
827
+ end
828
+
829
+ # @api private
830
+ #
831
+ # @param name [Symbol]
832
+ # @param blk [Proc]
833
+ def define_sorbet_constant!(name, &blk) = sorbet_runtime_constants.store(name, blk)
834
+ end
835
+
836
+ extend Orb::Internal::Util::SorbetRuntimeSupport
837
+
838
+ define_sorbet_constant!(:ParsedUri) do
839
+ T.type_alias do
840
+ {
841
+ scheme: T.nilable(String),
842
+ host: T.nilable(String),
843
+ port: T.nilable(Integer),
844
+ path: T.nilable(String),
845
+ query: T::Hash[String, T::Array[String]]
846
+ }
847
+ end
848
+ end
849
+
850
+ define_sorbet_constant!(:ServerSentEvent) do
851
+ T.type_alias do
852
+ {
853
+ event: T.nilable(String),
854
+ data: T.nilable(String),
855
+ id: T.nilable(String),
856
+ retry: T.nilable(Integer)
857
+ }
858
+ end
859
+ end
804
860
  end
805
861
  end
806
862
  end
data/lib/orb/internal.rb CHANGED
@@ -2,10 +2,16 @@
2
2
 
3
3
  module Orb
4
4
  module Internal
5
+ extend Orb::Internal::Util::SorbetRuntimeSupport
6
+
5
7
  OMIT =
6
8
  Object.new.tap do
7
9
  _1.define_singleton_method(:inspect) { "#<#{Orb::Internal}::OMIT>" }
8
10
  end
9
11
  .freeze
12
+
13
+ define_sorbet_constant!(:AnyHash) do
14
+ T.type_alias { T::Hash[Symbol, T.anything] }
15
+ end
10
16
  end
11
17
  end
@@ -84,6 +84,10 @@ module Orb
84
84
 
85
85
  # @!method self.variants
86
86
  # @return [Array(Orb::PercentageDiscount, Orb::AmountDiscount)]
87
+
88
+ define_sorbet_constant!(:Variants) do
89
+ T.type_alias { T.any(Orb::PercentageDiscount, Orb::AmountDiscount) }
90
+ end
87
91
  end
88
92
  end
89
93
  end
@@ -89,6 +89,12 @@ module Orb
89
89
 
90
90
  # @!method self.variants
91
91
  # @return [Array(Orb::CouponCreateParams::Discount::Percentage, Orb::CouponCreateParams::Discount::Amount)]
92
+
93
+ define_sorbet_constant!(:Variants) do
94
+ T.type_alias do
95
+ T.any(Orb::CouponCreateParams::Discount::Percentage, Orb::CouponCreateParams::Discount::Amount)
96
+ end
97
+ end
92
98
  end
93
99
  end
94
100
  end
@@ -489,6 +489,15 @@ module Orb
489
489
 
490
490
  # @!method self.variants
491
491
  # @return [Array(Orb::CustomerCreateParams::TaxConfiguration::Avalara, Orb::CustomerCreateParams::TaxConfiguration::Taxjar)]
492
+
493
+ define_sorbet_constant!(:Variants) do
494
+ T.type_alias do
495
+ T.any(
496
+ Orb::CustomerCreateParams::TaxConfiguration::Avalara,
497
+ Orb::CustomerCreateParams::TaxConfiguration::Taxjar
498
+ )
499
+ end
500
+ end
492
501
  end
493
502
 
494
503
  class TaxID < Orb::Internal::Type::BaseModel
@@ -490,6 +490,15 @@ module Orb
490
490
 
491
491
  # @!method self.variants
492
492
  # @return [Array(Orb::CustomerUpdateByExternalIDParams::TaxConfiguration::Avalara, Orb::CustomerUpdateByExternalIDParams::TaxConfiguration::Taxjar)]
493
+
494
+ define_sorbet_constant!(:Variants) do
495
+ T.type_alias do
496
+ T.any(
497
+ Orb::CustomerUpdateByExternalIDParams::TaxConfiguration::Avalara,
498
+ Orb::CustomerUpdateByExternalIDParams::TaxConfiguration::Taxjar
499
+ )
500
+ end
501
+ end
493
502
  end
494
503
 
495
504
  class TaxID < Orb::Internal::Type::BaseModel
@@ -484,6 +484,15 @@ module Orb
484
484
 
485
485
  # @!method self.variants
486
486
  # @return [Array(Orb::CustomerUpdateParams::TaxConfiguration::Avalara, Orb::CustomerUpdateParams::TaxConfiguration::Taxjar)]
487
+
488
+ define_sorbet_constant!(:Variants) do
489
+ T.type_alias do
490
+ T.any(
491
+ Orb::CustomerUpdateParams::TaxConfiguration::Avalara,
492
+ Orb::CustomerUpdateParams::TaxConfiguration::Taxjar
493
+ )
494
+ end
495
+ end
487
496
  end
488
497
 
489
498
  class TaxID < Orb::Internal::Type::BaseModel
@@ -1190,6 +1190,20 @@ module Orb
1190
1190
 
1191
1191
  # @!method self.variants
1192
1192
  # @return [Array(Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::Increment, Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::Decrement, Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::ExpirationChange, Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::CreditBlockExpiry, Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::Void, Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::VoidInitiated, Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::Amendment)]
1193
+
1194
+ define_sorbet_constant!(:Variants) do
1195
+ T.type_alias do
1196
+ T.any(
1197
+ Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::Increment,
1198
+ Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::Decrement,
1199
+ Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::ExpirationChange,
1200
+ Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::CreditBlockExpiry,
1201
+ Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::Void,
1202
+ Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::VoidInitiated,
1203
+ Orb::Models::Customers::Credits::LedgerCreateEntryByExternalIDResponse::Amendment
1204
+ )
1205
+ end
1206
+ end
1193
1207
  end
1194
1208
  end
1195
1209
  end
@@ -1182,6 +1182,20 @@ module Orb
1182
1182
 
1183
1183
  # @!method self.variants
1184
1184
  # @return [Array(Orb::Models::Customers::Credits::LedgerCreateEntryResponse::Increment, Orb::Models::Customers::Credits::LedgerCreateEntryResponse::Decrement, Orb::Models::Customers::Credits::LedgerCreateEntryResponse::ExpirationChange, Orb::Models::Customers::Credits::LedgerCreateEntryResponse::CreditBlockExpiry, Orb::Models::Customers::Credits::LedgerCreateEntryResponse::Void, Orb::Models::Customers::Credits::LedgerCreateEntryResponse::VoidInitiated, Orb::Models::Customers::Credits::LedgerCreateEntryResponse::Amendment)]
1185
+
1186
+ define_sorbet_constant!(:Variants) do
1187
+ T.type_alias do
1188
+ T.any(
1189
+ Orb::Models::Customers::Credits::LedgerCreateEntryResponse::Increment,
1190
+ Orb::Models::Customers::Credits::LedgerCreateEntryResponse::Decrement,
1191
+ Orb::Models::Customers::Credits::LedgerCreateEntryResponse::ExpirationChange,
1192
+ Orb::Models::Customers::Credits::LedgerCreateEntryResponse::CreditBlockExpiry,
1193
+ Orb::Models::Customers::Credits::LedgerCreateEntryResponse::Void,
1194
+ Orb::Models::Customers::Credits::LedgerCreateEntryResponse::VoidInitiated,
1195
+ Orb::Models::Customers::Credits::LedgerCreateEntryResponse::Amendment
1196
+ )
1197
+ end
1198
+ end
1185
1199
  end
1186
1200
  end
1187
1201
  end
@@ -1186,6 +1186,20 @@ module Orb
1186
1186
 
1187
1187
  # @!method self.variants
1188
1188
  # @return [Array(Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::Increment, Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::Decrement, Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::ExpirationChange, Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::CreditBlockExpiry, Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::Void, Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::VoidInitiated, Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::Amendment)]
1189
+
1190
+ define_sorbet_constant!(:Variants) do
1191
+ T.type_alias do
1192
+ T.any(
1193
+ Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::Increment,
1194
+ Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::Decrement,
1195
+ Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::ExpirationChange,
1196
+ Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::CreditBlockExpiry,
1197
+ Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::Void,
1198
+ Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::VoidInitiated,
1199
+ Orb::Models::Customers::Credits::LedgerListByExternalIDResponse::Amendment
1200
+ )
1201
+ end
1202
+ end
1189
1203
  end
1190
1204
  end
1191
1205
  end
@@ -1174,6 +1174,20 @@ module Orb
1174
1174
 
1175
1175
  # @!method self.variants
1176
1176
  # @return [Array(Orb::Models::Customers::Credits::LedgerListResponse::Increment, Orb::Models::Customers::Credits::LedgerListResponse::Decrement, Orb::Models::Customers::Credits::LedgerListResponse::ExpirationChange, Orb::Models::Customers::Credits::LedgerListResponse::CreditBlockExpiry, Orb::Models::Customers::Credits::LedgerListResponse::Void, Orb::Models::Customers::Credits::LedgerListResponse::VoidInitiated, Orb::Models::Customers::Credits::LedgerListResponse::Amendment)]
1177
+
1178
+ define_sorbet_constant!(:Variants) do
1179
+ T.type_alias do
1180
+ T.any(
1181
+ Orb::Models::Customers::Credits::LedgerListResponse::Increment,
1182
+ Orb::Models::Customers::Credits::LedgerListResponse::Decrement,
1183
+ Orb::Models::Customers::Credits::LedgerListResponse::ExpirationChange,
1184
+ Orb::Models::Customers::Credits::LedgerListResponse::CreditBlockExpiry,
1185
+ Orb::Models::Customers::Credits::LedgerListResponse::Void,
1186
+ Orb::Models::Customers::Credits::LedgerListResponse::VoidInitiated,
1187
+ Orb::Models::Customers::Credits::LedgerListResponse::Amendment
1188
+ )
1189
+ end
1190
+ end
1177
1191
  end
1178
1192
  end
1179
1193
  end