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.
Files changed (381) hide show
  1. checksums.yaml +4 -4
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +132 -0
  4. data/README.md +84 -23
  5. data/SECURITY.md +27 -0
  6. data/lib/dodopayments/client.rb +15 -19
  7. data/lib/dodopayments/errors.rb +168 -159
  8. data/lib/dodopayments/internal/default_page_number_pagination.rb +91 -0
  9. data/lib/dodopayments/internal/transport/base_client.rb +486 -0
  10. data/lib/dodopayments/internal/transport/pooled_net_requester.rb +197 -0
  11. data/lib/dodopayments/internal/type/array_of.rb +143 -0
  12. data/lib/dodopayments/internal/type/base_model.rb +423 -0
  13. data/lib/dodopayments/internal/type/base_page.rb +47 -0
  14. data/lib/dodopayments/internal/type/boolean.rb +60 -0
  15. data/lib/dodopayments/internal/type/converter.rb +271 -0
  16. data/lib/dodopayments/internal/type/enum.rb +129 -0
  17. data/lib/dodopayments/internal/type/hash_of.rb +163 -0
  18. data/lib/dodopayments/internal/type/io_like.rb +77 -0
  19. data/lib/dodopayments/internal/type/request_parameters.rb +49 -0
  20. data/lib/dodopayments/internal/type/union.rb +232 -0
  21. data/lib/dodopayments/internal/type/unknown.rb +64 -0
  22. data/lib/dodopayments/internal/util.rb +782 -0
  23. data/lib/dodopayments/internal.rb +12 -0
  24. data/lib/dodopayments/models/attach_existing_customer.rb +2 -2
  25. data/lib/dodopayments/models/billing_address.rb +2 -2
  26. data/lib/dodopayments/models/country_code.rb +7 -3
  27. data/lib/dodopayments/models/create_new_customer.rb +5 -5
  28. data/lib/dodopayments/models/customer.rb +3 -2
  29. data/lib/dodopayments/models/customer_create_params.rb +5 -4
  30. data/lib/dodopayments/models/customer_limited_details.rb +2 -2
  31. data/lib/dodopayments/models/customer_list_params.rb +5 -4
  32. data/lib/dodopayments/models/customer_portal_session.rb +2 -2
  33. data/lib/dodopayments/models/customer_request.rb +5 -6
  34. data/lib/dodopayments/models/customer_retrieve_params.rb +5 -4
  35. data/lib/dodopayments/models/customer_update_params.rb +5 -4
  36. data/lib/dodopayments/models/customers/customer_portal_create_params.rb +6 -5
  37. data/lib/dodopayments/models/discount.rb +7 -6
  38. data/lib/dodopayments/models/discount_create_params.rb +13 -12
  39. data/lib/dodopayments/models/discount_delete_params.rb +5 -4
  40. data/lib/dodopayments/models/discount_list_params.rb +5 -4
  41. data/lib/dodopayments/models/discount_retrieve_params.rb +5 -4
  42. data/lib/dodopayments/models/discount_type.rb +7 -2
  43. data/lib/dodopayments/models/discount_update_params.rb +11 -10
  44. data/lib/dodopayments/models/dispute.rb +4 -3
  45. data/lib/dodopayments/models/dispute_list_params.rb +5 -4
  46. data/lib/dodopayments/models/dispute_retrieve_params.rb +5 -4
  47. data/lib/dodopayments/models/dispute_stage.rb +7 -2
  48. data/lib/dodopayments/models/dispute_status.rb +7 -2
  49. data/lib/dodopayments/models/intent_status.rb +7 -2
  50. data/lib/dodopayments/models/invoices/payment_retrieve_params.rb +5 -4
  51. data/lib/dodopayments/models/license_activate_params.rb +5 -4
  52. data/lib/dodopayments/models/license_deactivate_params.rb +5 -4
  53. data/lib/dodopayments/models/license_key.rb +4 -3
  54. data/lib/dodopayments/models/license_key_duration.rb +2 -2
  55. data/lib/dodopayments/models/license_key_instance.rb +3 -2
  56. data/lib/dodopayments/models/license_key_instance_list_params.rb +5 -4
  57. data/lib/dodopayments/models/license_key_instance_retrieve_params.rb +5 -4
  58. data/lib/dodopayments/models/license_key_instance_update_params.rb +5 -4
  59. data/lib/dodopayments/models/license_key_list_params.rb +5 -4
  60. data/lib/dodopayments/models/license_key_retrieve_params.rb +5 -4
  61. data/lib/dodopayments/models/license_key_status.rb +7 -2
  62. data/lib/dodopayments/models/license_key_update_params.rb +9 -8
  63. data/lib/dodopayments/models/license_validate_params.rb +5 -4
  64. data/lib/dodopayments/models/license_validate_response.rb +4 -3
  65. data/lib/dodopayments/models/misc_list_supported_countries_params.rb +5 -4
  66. data/lib/dodopayments/models/misc_list_supported_countries_response.rb +2 -1
  67. data/lib/dodopayments/models/one_time_product_cart_item.rb +4 -3
  68. data/lib/dodopayments/models/payment.rb +18 -11
  69. data/lib/dodopayments/models/payment_create_params.rb +232 -9
  70. data/lib/dodopayments/models/payment_create_response.rb +6 -5
  71. data/lib/dodopayments/models/payment_list_params.rb +5 -4
  72. data/lib/dodopayments/models/payment_list_response.rb +12 -5
  73. data/lib/dodopayments/models/payment_retrieve_params.rb +5 -4
  74. data/lib/dodopayments/models/payout_list_params.rb +5 -4
  75. data/lib/dodopayments/models/payout_list_response.rb +21 -6
  76. data/lib/dodopayments/models/price.rb +41 -30
  77. data/lib/dodopayments/models/product.rb +17 -10
  78. data/lib/dodopayments/models/product_create_params.rb +16 -11
  79. data/lib/dodopayments/models/product_delete_params.rb +5 -4
  80. data/lib/dodopayments/models/product_list_params.rb +10 -9
  81. data/lib/dodopayments/models/product_list_response.rb +30 -17
  82. data/lib/dodopayments/models/product_retrieve_params.rb +5 -4
  83. data/lib/dodopayments/models/product_unarchive_params.rb +5 -4
  84. data/lib/dodopayments/models/product_update_params.rb +22 -17
  85. data/lib/dodopayments/models/products/image_update_params.rb +6 -5
  86. data/lib/dodopayments/models/products/image_update_response.rb +3 -2
  87. data/lib/dodopayments/models/refund.rb +11 -4
  88. data/lib/dodopayments/models/refund_create_params.rb +6 -13
  89. data/lib/dodopayments/models/refund_list_params.rb +5 -4
  90. data/lib/dodopayments/models/refund_retrieve_params.rb +5 -4
  91. data/lib/dodopayments/models/refund_status.rb +7 -2
  92. data/lib/dodopayments/models/subscription.rb +21 -7
  93. data/lib/dodopayments/models/subscription_charge_params.rb +27 -0
  94. data/lib/dodopayments/models/subscription_charge_response.rb +20 -0
  95. data/lib/dodopayments/models/subscription_create_params.rb +262 -8
  96. data/lib/dodopayments/models/subscription_create_response.rb +6 -5
  97. data/lib/dodopayments/models/subscription_list_params.rb +5 -4
  98. data/lib/dodopayments/models/subscription_retrieve_params.rb +5 -4
  99. data/lib/dodopayments/models/subscription_status.rb +7 -2
  100. data/lib/dodopayments/models/subscription_update_params.rb +19 -6
  101. data/lib/dodopayments/models/time_interval.rb +7 -2
  102. data/lib/dodopayments/models/webhook_event.rb +3 -2
  103. data/lib/dodopayments/models/webhook_event_list_params.rb +6 -5
  104. data/lib/dodopayments/models/webhook_event_retrieve_params.rb +5 -4
  105. data/lib/dodopayments/request_options.rb +12 -47
  106. data/lib/dodopayments/resources/customers/customer_portal.rb +10 -8
  107. data/lib/dodopayments/resources/customers.rb +30 -29
  108. data/lib/dodopayments/resources/discounts.rb +45 -69
  109. data/lib/dodopayments/resources/disputes.rb +20 -22
  110. data/lib/dodopayments/resources/invoices/payments.rb +8 -5
  111. data/lib/dodopayments/resources/invoices.rb +2 -0
  112. data/lib/dodopayments/resources/license_key_instances.rb +23 -21
  113. data/lib/dodopayments/resources/license_keys.rb +27 -32
  114. data/lib/dodopayments/resources/licenses.rb +20 -18
  115. data/lib/dodopayments/resources/misc.rb +7 -3
  116. data/lib/dodopayments/resources/payments.rb +36 -43
  117. data/lib/dodopayments/resources/payouts.rb +9 -7
  118. data/lib/dodopayments/resources/products/images.rb +9 -7
  119. data/lib/dodopayments/resources/products.rb +59 -87
  120. data/lib/dodopayments/resources/refunds.rb +25 -29
  121. data/lib/dodopayments/resources/subscriptions.rb +68 -54
  122. data/lib/dodopayments/resources/webhook_events.rb +20 -21
  123. data/lib/dodopayments/version.rb +1 -1
  124. data/lib/dodopayments.rb +34 -7
  125. data/manifest.yaml +1 -0
  126. data/rbi/lib/dodopayments/client.rbi +32 -47
  127. data/rbi/lib/dodopayments/errors.rbi +125 -161
  128. data/rbi/lib/dodopayments/internal/default_page_number_pagination.rbi +18 -0
  129. data/rbi/lib/dodopayments/internal/transport/base_client.rbi +199 -0
  130. data/rbi/lib/dodopayments/internal/transport/pooled_net_requester.rbi +60 -0
  131. data/rbi/lib/dodopayments/internal/type/array_of.rbi +85 -0
  132. data/rbi/lib/dodopayments/internal/type/base_model.rbi +214 -0
  133. data/rbi/lib/dodopayments/internal/type/base_page.rbi +36 -0
  134. data/rbi/lib/dodopayments/internal/type/boolean.rbi +48 -0
  135. data/rbi/lib/dodopayments/internal/type/converter.rbi +120 -0
  136. data/rbi/lib/dodopayments/internal/type/enum.rbi +69 -0
  137. data/rbi/lib/dodopayments/internal/type/hash_of.rbi +85 -0
  138. data/rbi/lib/dodopayments/internal/type/io_like.rbi +46 -0
  139. data/rbi/lib/dodopayments/internal/type/request_parameters.rbi +21 -0
  140. data/rbi/lib/dodopayments/internal/type/union.rbi +77 -0
  141. data/rbi/lib/dodopayments/internal/type/unknown.rbi +40 -0
  142. data/rbi/lib/dodopayments/internal/util.rbi +297 -0
  143. data/rbi/lib/dodopayments/internal.rbi +12 -0
  144. data/rbi/lib/dodopayments/models/attach_existing_customer.rbi +4 -11
  145. data/rbi/lib/dodopayments/models/billing_address.rbi +20 -38
  146. data/rbi/lib/dodopayments/models/country_code.rbi +256 -256
  147. data/rbi/lib/dodopayments/models/create_new_customer.rbi +11 -30
  148. data/rbi/lib/dodopayments/models/customer.rbi +9 -41
  149. data/rbi/lib/dodopayments/models/customer_create_params.rbi +9 -26
  150. data/rbi/lib/dodopayments/models/customer_limited_details.rbi +6 -23
  151. data/rbi/lib/dodopayments/models/customer_list_params.rbi +8 -20
  152. data/rbi/lib/dodopayments/models/customer_portal_session.rbi +4 -11
  153. data/rbi/lib/dodopayments/models/customer_request.rbi +4 -7
  154. data/rbi/lib/dodopayments/models/customer_retrieve_params.rbi +6 -8
  155. data/rbi/lib/dodopayments/models/customer_update_params.rbi +8 -20
  156. data/rbi/lib/dodopayments/models/customers/customer_portal_create_params.rbi +7 -14
  157. data/rbi/lib/dodopayments/models/discount.rbi +20 -78
  158. data/rbi/lib/dodopayments/models/discount_create_params.rbi +23 -61
  159. data/rbi/lib/dodopayments/models/discount_delete_params.rbi +6 -8
  160. data/rbi/lib/dodopayments/models/discount_list_params.rbi +8 -20
  161. data/rbi/lib/dodopayments/models/discount_retrieve_params.rbi +6 -8
  162. data/rbi/lib/dodopayments/models/discount_type.rbi +8 -8
  163. data/rbi/lib/dodopayments/models/discount_update_params.rbi +21 -59
  164. data/rbi/lib/dodopayments/models/dispute.rbi +27 -59
  165. data/rbi/lib/dodopayments/models/dispute_list_params.rbi +19 -57
  166. data/rbi/lib/dodopayments/models/dispute_retrieve_params.rbi +6 -8
  167. data/rbi/lib/dodopayments/models/dispute_stage.rbi +10 -10
  168. data/rbi/lib/dodopayments/models/dispute_status.rbi +14 -14
  169. data/rbi/lib/dodopayments/models/intent_status.rbi +22 -18
  170. data/rbi/lib/dodopayments/models/invoices/payment_retrieve_params.rbi +6 -8
  171. data/rbi/lib/dodopayments/models/license_activate_params.rbi +8 -20
  172. data/rbi/lib/dodopayments/models/license_deactivate_params.rbi +8 -20
  173. data/rbi/lib/dodopayments/models/license_key.rbi +19 -82
  174. data/rbi/lib/dodopayments/models/license_key_duration.rbi +8 -20
  175. data/rbi/lib/dodopayments/models/license_key_instance.rbi +8 -35
  176. data/rbi/lib/dodopayments/models/license_key_instance_list_params.rbi +9 -26
  177. data/rbi/lib/dodopayments/models/license_key_instance_retrieve_params.rbi +6 -8
  178. data/rbi/lib/dodopayments/models/license_key_instance_update_params.rbi +7 -17
  179. data/rbi/lib/dodopayments/models/license_key_list_params.rbi +21 -40
  180. data/rbi/lib/dodopayments/models/license_key_retrieve_params.rbi +6 -8
  181. data/rbi/lib/dodopayments/models/license_key_status.rbi +10 -10
  182. data/rbi/lib/dodopayments/models/license_key_update_params.rbi +12 -29
  183. data/rbi/lib/dodopayments/models/license_validate_params.rbi +8 -20
  184. data/rbi/lib/dodopayments/models/license_validate_response.rbi +4 -11
  185. data/rbi/lib/dodopayments/models/misc_list_supported_countries_params.rbi +6 -8
  186. data/rbi/lib/dodopayments/models/misc_list_supported_countries_response.rbi +5 -1
  187. data/rbi/lib/dodopayments/models/one_time_product_cart_item.rbi +8 -24
  188. data/rbi/lib/dodopayments/models/payment.rbi +197 -308
  189. data/rbi/lib/dodopayments/models/payment_create_params.rbi +261 -61
  190. data/rbi/lib/dodopayments/models/payment_create_response.rbi +16 -60
  191. data/rbi/lib/dodopayments/models/payment_list_params.rbi +16 -54
  192. data/rbi/lib/dodopayments/models/payment_list_response.rbi +178 -228
  193. data/rbi/lib/dodopayments/models/payment_retrieve_params.rbi +6 -8
  194. data/rbi/lib/dodopayments/models/payout_list_params.rbi +8 -20
  195. data/rbi/lib/dodopayments/models/payout_list_response.rbi +197 -271
  196. data/rbi/lib/dodopayments/models/price.rbi +368 -464
  197. data/rbi/lib/dodopayments/models/product.rbi +48 -119
  198. data/rbi/lib/dodopayments/models/product_create_params.rbi +46 -86
  199. data/rbi/lib/dodopayments/models/product_delete_params.rbi +6 -8
  200. data/rbi/lib/dodopayments/models/product_list_params.rbi +15 -34
  201. data/rbi/lib/dodopayments/models/product_list_response.rbi +209 -275
  202. data/rbi/lib/dodopayments/models/product_retrieve_params.rbi +6 -8
  203. data/rbi/lib/dodopayments/models/product_unarchive_params.rbi +6 -8
  204. data/rbi/lib/dodopayments/models/product_update_params.rbi +55 -102
  205. data/rbi/lib/dodopayments/models/products/image_update_params.rbi +7 -14
  206. data/rbi/lib/dodopayments/models/products/image_update_response.rbi +5 -17
  207. data/rbi/lib/dodopayments/models/refund.rbi +181 -213
  208. data/rbi/lib/dodopayments/models/refund_create_params.rbi +13 -39
  209. data/rbi/lib/dodopayments/models/refund_list_params.rbi +15 -48
  210. data/rbi/lib/dodopayments/models/refund_retrieve_params.rbi +6 -8
  211. data/rbi/lib/dodopayments/models/refund_status.rbi +11 -11
  212. data/rbi/lib/dodopayments/models/subscription.rbi +202 -283
  213. data/rbi/lib/dodopayments/models/subscription_charge_params.rbi +27 -0
  214. data/rbi/lib/dodopayments/models/subscription_charge_response.rbi +16 -0
  215. data/rbi/lib/dodopayments/models/subscription_create_params.rbi +315 -69
  216. data/rbi/lib/dodopayments/models/subscription_create_response.rbi +15 -51
  217. data/rbi/lib/dodopayments/models/subscription_list_params.rbi +15 -48
  218. data/rbi/lib/dodopayments/models/subscription_retrieve_params.rbi +6 -8
  219. data/rbi/lib/dodopayments/models/subscription_status.rbi +14 -14
  220. data/rbi/lib/dodopayments/models/subscription_update_params.rbi +25 -21
  221. data/rbi/lib/dodopayments/models/time_interval.rbi +11 -11
  222. data/rbi/lib/dodopayments/models/webhook_event.rbi +11 -54
  223. data/rbi/lib/dodopayments/models/webhook_event_list_params.rbi +12 -45
  224. data/rbi/lib/dodopayments/models/webhook_event_retrieve_params.rbi +6 -8
  225. data/rbi/lib/dodopayments/request_options.rbi +18 -81
  226. data/rbi/lib/dodopayments/resources/customers/customer_portal.rbi +5 -7
  227. data/rbi/lib/dodopayments/resources/customers.rbi +12 -20
  228. data/rbi/lib/dodopayments/resources/discounts.rbi +27 -37
  229. data/rbi/lib/dodopayments/resources/disputes.rbi +9 -13
  230. data/rbi/lib/dodopayments/resources/invoices/payments.rbi +4 -5
  231. data/rbi/lib/dodopayments/resources/invoices.rbi +3 -4
  232. data/rbi/lib/dodopayments/resources/license_key_instances.rbi +9 -15
  233. data/rbi/lib/dodopayments/resources/license_keys.rbi +13 -19
  234. data/rbi/lib/dodopayments/resources/licenses.rbi +8 -11
  235. data/rbi/lib/dodopayments/resources/misc.rbi +12 -6
  236. data/rbi/lib/dodopayments/resources/payments.rbi +32 -21
  237. data/rbi/lib/dodopayments/resources/payouts.rbi +5 -7
  238. data/rbi/lib/dodopayments/resources/products/images.rbi +4 -6
  239. data/rbi/lib/dodopayments/resources/products.rbi +43 -44
  240. data/rbi/lib/dodopayments/resources/refunds.rbi +10 -20
  241. data/rbi/lib/dodopayments/resources/subscriptions.rbi +57 -24
  242. data/rbi/lib/dodopayments/resources/webhook_events.rbi +7 -10
  243. data/rbi/lib/dodopayments/version.rbi +1 -1
  244. data/sig/dodopayments/client.rbs +8 -8
  245. data/sig/dodopayments/errors.rbs +98 -96
  246. data/sig/dodopayments/internal/default_page_number_pagination.rbs +11 -0
  247. data/sig/dodopayments/internal/transport/base_client.rbs +110 -0
  248. data/sig/dodopayments/internal/transport/pooled_net_requester.rbs +41 -0
  249. data/sig/dodopayments/internal/type/array_of.rbs +43 -0
  250. data/sig/dodopayments/internal/type/base_model.rbs +92 -0
  251. data/sig/dodopayments/internal/type/base_page.rbs +24 -0
  252. data/sig/dodopayments/internal/type/boolean.rbs +23 -0
  253. data/sig/dodopayments/internal/type/converter.rbs +54 -0
  254. data/sig/dodopayments/internal/type/enum.rbs +29 -0
  255. data/sig/dodopayments/internal/type/hash_of.rbs +43 -0
  256. data/sig/dodopayments/internal/type/io_like.rbs +23 -0
  257. data/sig/dodopayments/internal/type/request_parameters.rbs +15 -0
  258. data/sig/dodopayments/internal/type/union.rbs +47 -0
  259. data/sig/dodopayments/internal/type/unknown.rbs +23 -0
  260. data/sig/dodopayments/internal/util.rbs +156 -0
  261. data/sig/dodopayments/internal.rbs +5 -0
  262. data/sig/dodopayments/models/attach_existing_customer.rbs +2 -7
  263. data/sig/dodopayments/models/billing_address.rbs +8 -12
  264. data/sig/dodopayments/models/country_code.rbs +4 -2
  265. data/sig/dodopayments/models/create_new_customer.rbs +7 -12
  266. data/sig/dodopayments/models/customer.rbs +9 -13
  267. data/sig/dodopayments/models/customer_create_params.rbs +10 -15
  268. data/sig/dodopayments/models/customer_limited_details.rbs +2 -7
  269. data/sig/dodopayments/models/customer_list_params.rbs +9 -14
  270. data/sig/dodopayments/models/customer_portal_session.rbs +2 -7
  271. data/sig/dodopayments/models/customer_request.rbs +4 -2
  272. data/sig/dodopayments/models/customer_retrieve_params.rbs +6 -10
  273. data/sig/dodopayments/models/customer_update_params.rbs +9 -14
  274. data/sig/dodopayments/models/customers/customer_portal_create_params.rbs +8 -13
  275. data/sig/dodopayments/models/discount.rbs +14 -18
  276. data/sig/dodopayments/models/discount_create_params.rbs +14 -19
  277. data/sig/dodopayments/models/discount_delete_params.rbs +6 -10
  278. data/sig/dodopayments/models/discount_list_params.rbs +9 -14
  279. data/sig/dodopayments/models/discount_retrieve_params.rbs +6 -10
  280. data/sig/dodopayments/models/discount_type.rbs +4 -2
  281. data/sig/dodopayments/models/discount_update_params.rbs +14 -19
  282. data/sig/dodopayments/models/dispute.rbs +11 -15
  283. data/sig/dodopayments/models/dispute_list_params.rbs +14 -19
  284. data/sig/dodopayments/models/dispute_retrieve_params.rbs +6 -10
  285. data/sig/dodopayments/models/dispute_stage.rbs +4 -2
  286. data/sig/dodopayments/models/dispute_status.rbs +4 -2
  287. data/sig/dodopayments/models/intent_status.rbs +4 -2
  288. data/sig/dodopayments/models/invoices/payment_retrieve_params.rbs +6 -10
  289. data/sig/dodopayments/models/license_activate_params.rbs +10 -14
  290. data/sig/dodopayments/models/license_deactivate_params.rbs +9 -14
  291. data/sig/dodopayments/models/license_key.rbs +15 -19
  292. data/sig/dodopayments/models/license_key_duration.rbs +5 -7
  293. data/sig/dodopayments/models/license_key_instance.rbs +8 -13
  294. data/sig/dodopayments/models/license_key_instance_list_params.rbs +10 -15
  295. data/sig/dodopayments/models/license_key_instance_retrieve_params.rbs +5 -10
  296. data/sig/dodopayments/models/license_key_instance_update_params.rbs +8 -10
  297. data/sig/dodopayments/models/license_key_list_params.rbs +12 -17
  298. data/sig/dodopayments/models/license_key_retrieve_params.rbs +6 -10
  299. data/sig/dodopayments/models/license_key_status.rbs +4 -2
  300. data/sig/dodopayments/models/license_key_update_params.rbs +10 -15
  301. data/sig/dodopayments/models/license_validate_params.rbs +9 -14
  302. data/sig/dodopayments/models/license_validate_response.rbs +2 -7
  303. data/sig/dodopayments/models/misc_list_supported_countries_params.rbs +5 -10
  304. data/sig/dodopayments/models/one_time_product_cart_item.rbs +6 -7
  305. data/sig/dodopayments/models/payment.rbs +28 -35
  306. data/sig/dodopayments/models/payment_create_params.rbs +373 -20
  307. data/sig/dodopayments/models/payment_create_response.rbs +11 -16
  308. data/sig/dodopayments/models/payment_list_params.rbs +14 -19
  309. data/sig/dodopayments/models/payment_list_response.rbs +17 -20
  310. data/sig/dodopayments/models/payment_retrieve_params.rbs +6 -10
  311. data/sig/dodopayments/models/payout_list_params.rbs +9 -14
  312. data/sig/dodopayments/models/payout_list_response.rbs +30 -28
  313. data/sig/dodopayments/models/price.rbs +37 -41
  314. data/sig/dodopayments/models/product.rbs +22 -24
  315. data/sig/dodopayments/models/product_create_params.rbs +20 -23
  316. data/sig/dodopayments/models/product_delete_params.rbs +6 -10
  317. data/sig/dodopayments/models/product_list_params.rbs +11 -16
  318. data/sig/dodopayments/models/product_list_response.rbs +24 -25
  319. data/sig/dodopayments/models/product_retrieve_params.rbs +6 -10
  320. data/sig/dodopayments/models/product_unarchive_params.rbs +6 -10
  321. data/sig/dodopayments/models/product_update_params.rbs +21 -24
  322. data/sig/dodopayments/models/products/image_update_params.rbs +9 -13
  323. data/sig/dodopayments/models/products/image_update_response.rbs +2 -7
  324. data/sig/dodopayments/models/refund.rbs +15 -15
  325. data/sig/dodopayments/models/refund_create_params.rbs +10 -18
  326. data/sig/dodopayments/models/refund_list_params.rbs +13 -18
  327. data/sig/dodopayments/models/refund_retrieve_params.rbs +6 -10
  328. data/sig/dodopayments/models/refund_status.rbs +4 -2
  329. data/sig/dodopayments/models/subscription.rbs +29 -27
  330. data/sig/dodopayments/models/subscription_charge_params.rbs +21 -0
  331. data/sig/dodopayments/models/subscription_charge_response.rbs +13 -0
  332. data/sig/dodopayments/models/subscription_create_params.rbs +391 -22
  333. data/sig/dodopayments/models/subscription_create_response.rbs +10 -15
  334. data/sig/dodopayments/models/subscription_list_params.rbs +13 -18
  335. data/sig/dodopayments/models/subscription_retrieve_params.rbs +6 -10
  336. data/sig/dodopayments/models/subscription_status.rbs +4 -2
  337. data/sig/dodopayments/models/subscription_update_params.rbs +18 -15
  338. data/sig/dodopayments/models/time_interval.rbs +4 -2
  339. data/sig/dodopayments/models/webhook_event.rbs +11 -15
  340. data/sig/dodopayments/models/webhook_event_list_params.rbs +13 -18
  341. data/sig/dodopayments/models/webhook_event_retrieve_params.rbs +6 -10
  342. data/sig/dodopayments/request_options.rbs +3 -13
  343. data/sig/dodopayments/resources/customers/customer_portal.rbs +5 -11
  344. data/sig/dodopayments/resources/customers.rbs +21 -42
  345. data/sig/dodopayments/resources/discounts.rbs +34 -61
  346. data/sig/dodopayments/resources/disputes.rbs +14 -24
  347. data/sig/dodopayments/resources/invoices/payments.rbs +4 -10
  348. data/sig/dodopayments/resources/license_key_instances.rbs +15 -32
  349. data/sig/dodopayments/resources/license_keys.rbs +19 -36
  350. data/sig/dodopayments/resources/licenses.rbs +15 -30
  351. data/sig/dodopayments/resources/misc.rbs +3 -8
  352. data/sig/dodopayments/resources/payments.rbs +28 -39
  353. data/sig/dodopayments/resources/payouts.rbs +5 -9
  354. data/sig/dodopayments/resources/products/images.rbs +5 -11
  355. data/sig/dodopayments/resources/products.rbs +45 -71
  356. data/sig/dodopayments/resources/refunds.rbs +18 -33
  357. data/sig/dodopayments/resources/subscriptions.rbs +44 -54
  358. data/sig/dodopayments/resources/webhook_events.rbs +13 -24
  359. data/sig/dodopayments/version.rbs +1 -1
  360. metadata +63 -27
  361. data/lib/dodopayments/base_client.rb +0 -453
  362. data/lib/dodopayments/base_model.rb +0 -1217
  363. data/lib/dodopayments/base_page.rb +0 -62
  364. data/lib/dodopayments/default_page_number_pagination.rb +0 -97
  365. data/lib/dodopayments/extern.rb +0 -9
  366. data/lib/dodopayments/pooled_net_requester.rb +0 -164
  367. data/lib/dodopayments/util.rb +0 -717
  368. data/rbi/lib/dodopayments/base_client.rbi +0 -186
  369. data/rbi/lib/dodopayments/base_model.rbi +0 -606
  370. data/rbi/lib/dodopayments/base_page.rbi +0 -40
  371. data/rbi/lib/dodopayments/default_page_number_pagination.rbi +0 -17
  372. data/rbi/lib/dodopayments/extern.rbi +0 -8
  373. data/rbi/lib/dodopayments/pooled_net_requester.rbi +0 -47
  374. data/rbi/lib/dodopayments/util.rbi +0 -270
  375. data/sig/dodopayments/base_client.rbs +0 -103
  376. data/sig/dodopayments/base_model.rbs +0 -246
  377. data/sig/dodopayments/base_page.rbs +0 -20
  378. data/sig/dodopayments/default_page_number_pagination.rbs +0 -7
  379. data/sig/dodopayments/extern.rbs +0 -4
  380. data/sig/dodopayments/pooled_net_requester.rbs +0 -30
  381. 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