finch-api 0.1.0.pre.alpha.18 → 0.1.0.pre.alpha.20

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 (293) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -0
  3. data/README.md +4 -4
  4. data/SECURITY.md +2 -2
  5. data/lib/finch_api/errors.rb +22 -0
  6. data/lib/finch_api/internal/individuals_page.rb +1 -1
  7. data/lib/finch_api/internal/page.rb +1 -1
  8. data/lib/finch_api/internal/type/array_of.rb +14 -1
  9. data/lib/finch_api/internal/type/base_model.rb +84 -25
  10. data/lib/finch_api/internal/type/boolean.rb +15 -1
  11. data/lib/finch_api/internal/type/converter.rb +42 -34
  12. data/lib/finch_api/internal/type/enum.rb +25 -2
  13. data/lib/finch_api/internal/type/file_input.rb +13 -1
  14. data/lib/finch_api/internal/type/hash_of.rb +14 -1
  15. data/lib/finch_api/internal/type/union.rb +27 -7
  16. data/lib/finch_api/internal/type/unknown.rb +15 -1
  17. data/lib/finch_api/internal/util.rb +62 -10
  18. data/lib/finch_api/internal.rb +3 -0
  19. data/lib/finch_api/models/account_update_event.rb +110 -109
  20. data/lib/finch_api/models/base_webhook_event.rb +1 -1
  21. data/lib/finch_api/models/company_event.rb +2 -2
  22. data/lib/finch_api/models/connect/session_new_params.rb +12 -12
  23. data/lib/finch_api/models/connect/session_reauthenticate_params.rb +2 -2
  24. data/lib/finch_api/models/create_access_token_response.rb +7 -7
  25. data/lib/finch_api/models/directory_event.rb +4 -4
  26. data/lib/finch_api/models/employment_event.rb +4 -4
  27. data/lib/finch_api/models/hris/benefit_contribution.rb +3 -3
  28. data/lib/finch_api/models/hris/benefit_create_params.rb +11 -11
  29. data/lib/finch_api/models/hris/benefit_features_and_operations.rb +5 -120
  30. data/lib/finch_api/models/hris/benefit_type.rb +10 -10
  31. data/lib/finch_api/models/hris/benefits/individual_benefit.rb +11 -11
  32. data/lib/finch_api/models/hris/benefits/individual_enroll_many_params.rb +23 -23
  33. data/lib/finch_api/models/hris/benefits_support.rb +24 -24
  34. data/lib/finch_api/models/hris/company/pay_statement_item/rule_create_params.rb +11 -11
  35. data/lib/finch_api/models/hris/company/pay_statement_item_list_params.rb +2 -2
  36. data/lib/finch_api/models/hris/company/pay_statement_item_list_response.rb +18 -18
  37. data/lib/finch_api/models/hris/company.rb +23 -23
  38. data/lib/finch_api/models/hris/company_benefit.rb +12 -12
  39. data/lib/finch_api/models/hris/document_list_params.rb +2 -2
  40. data/lib/finch_api/models/hris/document_list_response.rb +4 -4
  41. data/lib/finch_api/models/hris/document_response.rb +4 -4
  42. data/lib/finch_api/models/hris/document_retreive_response.rb +1 -5
  43. data/lib/finch_api/models/hris/employment_data.rb +89 -99
  44. data/lib/finch_api/models/hris/employment_data_response.rb +2 -2
  45. data/lib/finch_api/models/hris/employment_retrieve_many_params.rb +4 -3
  46. data/lib/finch_api/models/hris/individual.rb +20 -26
  47. data/lib/finch_api/models/hris/individual_in_directory.rb +6 -6
  48. data/lib/finch_api/models/hris/individual_response.rb +2 -2
  49. data/lib/finch_api/models/hris/individual_retrieve_many_params.rb +4 -4
  50. data/lib/finch_api/models/hris/pay_statement.rb +184 -182
  51. data/lib/finch_api/models/hris/pay_statement_data_sync_in_progress.rb +76 -0
  52. data/lib/finch_api/models/hris/pay_statement_response.rb +50 -8
  53. data/lib/finch_api/models/hris/pay_statement_response_body.rb +27 -9
  54. data/lib/finch_api/models/hris/pay_statement_retrieve_many_params.rb +2 -2
  55. data/lib/finch_api/models/hris/payment.rb +37 -37
  56. data/lib/finch_api/models/hris/support_per_benefit_type.rb +4 -4
  57. data/lib/finch_api/models/hris/supported_benefit.rb +10 -9
  58. data/lib/finch_api/models/hris/w42005.rb +12 -12
  59. data/lib/finch_api/models/hris/w42020.rb +10 -10
  60. data/lib/finch_api/models/income.rb +8 -8
  61. data/lib/finch_api/models/individual_event.rb +4 -4
  62. data/lib/finch_api/models/introspection.rb +23 -23
  63. data/lib/finch_api/models/job_completion_event.rb +4 -4
  64. data/lib/finch_api/models/jobs/automated_async_job.rb +10 -10
  65. data/lib/finch_api/models/jobs/automated_create_params.rb +4 -4
  66. data/lib/finch_api/models/jobs/automated_list_response.rb +2 -2
  67. data/lib/finch_api/models/jobs/manual_async_job.rb +3 -3
  68. data/lib/finch_api/models/money.rb +4 -4
  69. data/lib/finch_api/models/operation_support_matrix.rb +9 -9
  70. data/lib/finch_api/models/pay_statement_event.rb +4 -4
  71. data/lib/finch_api/models/payment_event.rb +4 -4
  72. data/lib/finch_api/models/payroll/pay_group_list_response.rb +12 -12
  73. data/lib/finch_api/models/payroll/pay_group_retrieve_response.rb +5 -5
  74. data/lib/finch_api/models/provider.rb +104 -104
  75. data/lib/finch_api/models/sandbox/company_update_params.rb +21 -21
  76. data/lib/finch_api/models/sandbox/company_update_response.rb +2 -2
  77. data/lib/finch_api/models/sandbox/connection_create_params.rb +2 -2
  78. data/lib/finch_api/models/sandbox/connections/account_create_params.rb +2 -2
  79. data/lib/finch_api/models/sandbox/connections/account_update_params.rb +2 -2
  80. data/lib/finch_api/models/sandbox/directory_create_params.rb +57 -53
  81. data/lib/finch_api/models/sandbox/employment_update_params.rb +32 -28
  82. data/lib/finch_api/models/sandbox/employment_update_response.rb +17 -14
  83. data/lib/finch_api/models/sandbox/individual_update_params.rb +16 -16
  84. data/lib/finch_api/models/sandbox/individual_update_response.rb +2 -2
  85. data/lib/finch_api/models/sandbox/job_create_params.rb +2 -2
  86. data/lib/finch_api/models/sandbox/jobs/sandbox_job_configuration.rb +6 -6
  87. data/lib/finch_api/models/sandbox/payment_create_params.rb +160 -367
  88. data/lib/finch_api/models/webhook_event.rb +1 -16
  89. data/lib/finch_api/models.rb +30 -19
  90. data/lib/finch_api/resources/access_tokens.rb +1 -1
  91. data/lib/finch_api/resources/account.rb +2 -2
  92. data/lib/finch_api/resources/connect/sessions.rb +5 -5
  93. data/lib/finch_api/resources/hris/benefits/individuals.rb +4 -4
  94. data/lib/finch_api/resources/hris/benefits.rb +9 -9
  95. data/lib/finch_api/resources/hris/company/pay_statement_item/rules.rb +3 -3
  96. data/lib/finch_api/resources/hris/company/pay_statement_item.rb +1 -1
  97. data/lib/finch_api/resources/hris/company.rb +1 -1
  98. data/lib/finch_api/resources/hris/directory.rb +1 -1
  99. data/lib/finch_api/resources/hris/documents.rb +2 -2
  100. data/lib/finch_api/resources/hris/employments.rb +2 -2
  101. data/lib/finch_api/resources/hris/individuals.rb +3 -3
  102. data/lib/finch_api/resources/hris/pay_statements.rb +2 -2
  103. data/lib/finch_api/resources/hris/payments.rb +1 -1
  104. data/lib/finch_api/resources/jobs/automated.rb +3 -3
  105. data/lib/finch_api/resources/jobs/manual.rb +1 -1
  106. data/lib/finch_api/resources/providers.rb +1 -1
  107. data/lib/finch_api/resources/sandbox/company.rb +4 -4
  108. data/lib/finch_api/resources/sandbox/connections/accounts.rb +2 -2
  109. data/lib/finch_api/resources/sandbox/connections.rb +1 -1
  110. data/lib/finch_api/resources/sandbox/directory.rb +1 -1
  111. data/lib/finch_api/resources/sandbox/employment.rb +9 -9
  112. data/lib/finch_api/resources/sandbox/individual.rb +5 -5
  113. data/lib/finch_api/resources/sandbox/jobs/configuration.rb +4 -4
  114. data/lib/finch_api/resources/sandbox/jobs.rb +1 -1
  115. data/lib/finch_api/resources/sandbox/payment.rb +6 -3
  116. data/lib/finch_api/version.rb +1 -1
  117. data/lib/finch_api.rb +4 -2
  118. data/rbi/finch_api/errors.rbi +16 -0
  119. data/rbi/finch_api/internal/type/array_of.rbi +6 -0
  120. data/rbi/finch_api/internal/type/base_model.rbi +5 -0
  121. data/rbi/finch_api/internal/type/boolean.rbi +8 -0
  122. data/rbi/finch_api/internal/type/converter.rbi +15 -15
  123. data/rbi/finch_api/internal/type/enum.rbi +5 -0
  124. data/rbi/finch_api/internal/type/file_input.rbi +5 -0
  125. data/rbi/finch_api/internal/type/hash_of.rbi +6 -0
  126. data/rbi/finch_api/internal/type/union.rbi +10 -0
  127. data/rbi/finch_api/internal/type/unknown.rbi +8 -0
  128. data/rbi/finch_api/internal/util.rbi +36 -0
  129. data/rbi/finch_api/internal.rbi +3 -0
  130. data/rbi/finch_api/models/connect/session_new_params.rbi +4 -4
  131. data/rbi/finch_api/models/hris/benefit_features_and_operations.rbi +4 -296
  132. data/rbi/finch_api/models/hris/benefit_type.rbi +16 -16
  133. data/rbi/finch_api/models/hris/company/pay_statement_item_list_response.rbi +18 -33
  134. data/rbi/finch_api/models/hris/employment_data.rbi +123 -140
  135. data/rbi/finch_api/models/hris/employment_data_response.rbi +2 -13
  136. data/rbi/finch_api/models/hris/individual_response.rbi +2 -13
  137. data/rbi/finch_api/models/hris/pay_statement.rbi +275 -307
  138. data/rbi/finch_api/models/hris/pay_statement_data_sync_in_progress.rbi +188 -0
  139. data/rbi/finch_api/models/hris/pay_statement_response.rbi +84 -20
  140. data/rbi/finch_api/models/hris/pay_statement_response_body.rbi +45 -17
  141. data/rbi/finch_api/models/hris/payment.rbi +27 -30
  142. data/rbi/finch_api/models/hris/supported_benefit.rbi +12 -8
  143. data/rbi/finch_api/models/income.rbi +3 -3
  144. data/rbi/finch_api/models/money.rbi +4 -7
  145. data/rbi/finch_api/models/payroll/pay_group_list_response.rbi +25 -43
  146. data/rbi/finch_api/models/payroll/pay_group_retrieve_response.rbi +14 -14
  147. data/rbi/finch_api/models/sandbox/directory_create_params.rbi +20 -26
  148. data/rbi/finch_api/models/sandbox/employment_update_params.rbi +20 -26
  149. data/rbi/finch_api/models/sandbox/employment_update_response.rbi +20 -26
  150. data/rbi/finch_api/models/sandbox/payment_create_params.rbi +463 -727
  151. data/rbi/finch_api/resources/connect/sessions.rbi +2 -2
  152. data/rbi/finch_api/resources/hris/benefits.rbi +1 -3
  153. data/rbi/finch_api/resources/hris/documents.rbi +1 -1
  154. data/rbi/finch_api/resources/sandbox/employment.rbi +8 -5
  155. data/rbi/finch_api/resources/sandbox/payment.rbi +3 -2
  156. data/sig/finch_api/errors.rbs +9 -0
  157. data/sig/finch_api/internal/type/array_of.rbs +3 -0
  158. data/sig/finch_api/internal/type/base_model.rbs +2 -0
  159. data/sig/finch_api/internal/type/boolean.rbs +3 -0
  160. data/sig/finch_api/internal/type/converter.rbs +7 -1
  161. data/sig/finch_api/internal/type/enum.rbs +2 -0
  162. data/sig/finch_api/internal/type/file_input.rbs +2 -0
  163. data/sig/finch_api/internal/type/hash_of.rbs +3 -0
  164. data/sig/finch_api/internal/type/union.rbs +2 -0
  165. data/sig/finch_api/internal/type/unknown.rbs +3 -0
  166. data/sig/finch_api/internal/util.rbs +12 -0
  167. data/sig/finch_api/internal.rbs +2 -0
  168. data/sig/finch_api/models/access_token_create_params.rbs +8 -0
  169. data/sig/finch_api/models/account_disconnect_params.rbs +2 -0
  170. data/sig/finch_api/models/account_introspect_params.rbs +2 -0
  171. data/sig/finch_api/models/account_update_event.rbs +230 -12
  172. data/sig/finch_api/models/base_webhook_event.rbs +6 -0
  173. data/sig/finch_api/models/company_event.rbs +11 -6
  174. data/sig/finch_api/models/connect/session_new_params.rbs +26 -8
  175. data/sig/finch_api/models/connect/session_new_response.rbs +2 -0
  176. data/sig/finch_api/models/connect/session_reauthenticate_params.rbs +12 -4
  177. data/sig/finch_api/models/connect/session_reauthenticate_response.rbs +2 -0
  178. data/sig/finch_api/models/create_access_token_response.rbs +21 -8
  179. data/sig/finch_api/models/directory_event.rbs +13 -6
  180. data/sig/finch_api/models/disconnect_response.rbs +2 -0
  181. data/sig/finch_api/models/employment_event.rbs +13 -6
  182. data/sig/finch_api/models/hris/benefit_contribution.rbs +12 -4
  183. data/sig/finch_api/models/hris/benefit_create_params.rbs +21 -6
  184. data/sig/finch_api/models/hris/benefit_features_and_operations.rbs +9 -78
  185. data/sig/finch_api/models/hris/benefit_list_params.rbs +2 -0
  186. data/sig/finch_api/models/hris/benefit_list_supported_benefits_params.rbs +2 -0
  187. data/sig/finch_api/models/hris/benefit_retrieve_params.rbs +2 -0
  188. data/sig/finch_api/models/hris/benefit_type.rbs +21 -21
  189. data/sig/finch_api/models/hris/benefit_update_params.rbs +5 -0
  190. data/sig/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rbs +2 -0
  191. data/sig/finch_api/models/hris/benefits/individual_benefit.rbs +18 -4
  192. data/sig/finch_api/models/hris/benefits/individual_enroll_many_params.rbs +47 -18
  193. data/sig/finch_api/models/hris/benefits/individual_enrolled_ids_params.rbs +2 -0
  194. data/sig/finch_api/models/hris/benefits/individual_enrolled_ids_response.rbs +5 -0
  195. data/sig/finch_api/models/hris/benefits/individual_retrieve_many_benefits_params.rbs +5 -0
  196. data/sig/finch_api/models/hris/benefits/individual_unenroll_many_params.rbs +5 -0
  197. data/sig/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rbs +2 -0
  198. data/sig/finch_api/models/hris/benefits_support.rbs +15 -0
  199. data/sig/finch_api/models/hris/company/pay_statement_item/rule_create_params.rbs +23 -6
  200. data/sig/finch_api/models/hris/company/pay_statement_item/rule_create_response.rbs +20 -0
  201. data/sig/finch_api/models/hris/company/pay_statement_item/rule_delete_params.rbs +2 -0
  202. data/sig/finch_api/models/hris/company/pay_statement_item/rule_delete_response.rbs +21 -0
  203. data/sig/finch_api/models/hris/company/pay_statement_item/rule_list_params.rbs +2 -0
  204. data/sig/finch_api/models/hris/company/pay_statement_item/rule_list_response.rbs +20 -0
  205. data/sig/finch_api/models/hris/company/pay_statement_item/rule_update_params.rbs +5 -0
  206. data/sig/finch_api/models/hris/company/pay_statement_item/rule_update_response.rbs +20 -0
  207. data/sig/finch_api/models/hris/company/pay_statement_item_list_params.rbs +15 -6
  208. data/sig/finch_api/models/hris/company/pay_statement_item_list_response.rbs +23 -20
  209. data/sig/finch_api/models/hris/company.rbs +44 -12
  210. data/sig/finch_api/models/hris/company_benefit.rbs +21 -6
  211. data/sig/finch_api/models/hris/company_retrieve_params.rbs +2 -0
  212. data/sig/finch_api/models/hris/create_company_benefits_response.rbs +2 -0
  213. data/sig/finch_api/models/hris/directory_list_individuals_params.rbs +6 -0
  214. data/sig/finch_api/models/hris/directory_list_params.rbs +6 -0
  215. data/sig/finch_api/models/hris/document_list_params.rbs +14 -6
  216. data/sig/finch_api/models/hris/document_list_response.rbs +5 -0
  217. data/sig/finch_api/models/hris/document_response.rbs +14 -6
  218. data/sig/finch_api/models/hris/document_retreive_params.rbs +2 -0
  219. data/sig/finch_api/models/hris/employment_data.rbs +91 -49
  220. data/sig/finch_api/models/hris/employment_data_response.rbs +6 -0
  221. data/sig/finch_api/models/hris/employment_retrieve_many_params.rbs +7 -0
  222. data/sig/finch_api/models/hris/individual.rbs +49 -16
  223. data/sig/finch_api/models/hris/individual_in_directory.rbs +14 -0
  224. data/sig/finch_api/models/hris/individual_response.rbs +6 -0
  225. data/sig/finch_api/models/hris/individual_retrieve_many_params.rbs +10 -0
  226. data/sig/finch_api/models/hris/pay_statement.rbs +179 -133
  227. data/sig/finch_api/models/hris/pay_statement_data_sync_in_progress.rbs +78 -0
  228. data/sig/finch_api/models/hris/pay_statement_response.rbs +51 -13
  229. data/sig/finch_api/models/hris/pay_statement_response_body.rbs +24 -11
  230. data/sig/finch_api/models/hris/pay_statement_retrieve_many_params.rbs +11 -0
  231. data/sig/finch_api/models/hris/payment.rbs +44 -29
  232. data/sig/finch_api/models/hris/payment_list_params.rbs +6 -0
  233. data/sig/finch_api/models/hris/support_per_benefit_type.rbs +5 -0
  234. data/sig/finch_api/models/hris/supported_benefit.rbs +22 -12
  235. data/sig/finch_api/models/hris/update_company_benefit_response.rbs +2 -0
  236. data/sig/finch_api/models/hris/w42005.rbs +30 -16
  237. data/sig/finch_api/models/hris/w42020.rbs +27 -10
  238. data/sig/finch_api/models/income.rbs +14 -7
  239. data/sig/finch_api/models/individual_event.rbs +13 -6
  240. data/sig/finch_api/models/introspection.rbs +51 -14
  241. data/sig/finch_api/models/job_completion_event.rbs +13 -6
  242. data/sig/finch_api/models/jobs/automated_async_job.rbs +22 -8
  243. data/sig/finch_api/models/jobs/automated_create_params.rbs +8 -0
  244. data/sig/finch_api/models/jobs/automated_create_response.rbs +7 -0
  245. data/sig/finch_api/models/jobs/automated_list_params.rbs +6 -0
  246. data/sig/finch_api/models/jobs/automated_list_response.rbs +18 -0
  247. data/sig/finch_api/models/jobs/automated_retrieve_params.rbs +2 -0
  248. data/sig/finch_api/models/jobs/manual_async_job.rbs +10 -4
  249. data/sig/finch_api/models/jobs/manual_retrieve_params.rbs +2 -0
  250. data/sig/finch_api/models/location.rbs +11 -0
  251. data/sig/finch_api/models/money.rbs +3 -3
  252. data/sig/finch_api/models/operation_support_matrix.rbs +7 -0
  253. data/sig/finch_api/models/paging.rbs +2 -0
  254. data/sig/finch_api/models/pay_statement_event.rbs +13 -6
  255. data/sig/finch_api/models/payment_event.rbs +13 -6
  256. data/sig/finch_api/models/payroll/pay_group_list_params.rbs +6 -0
  257. data/sig/finch_api/models/payroll/pay_group_list_response.rbs +22 -24
  258. data/sig/finch_api/models/payroll/pay_group_retrieve_params.rbs +2 -0
  259. data/sig/finch_api/models/payroll/pay_group_retrieve_response.rbs +17 -10
  260. data/sig/finch_api/models/provider.rbs +227 -6
  261. data/sig/finch_api/models/provider_list_params.rbs +2 -0
  262. data/sig/finch_api/models/request_forwarding_forward_params.rbs +9 -0
  263. data/sig/finch_api/models/request_forwarding_forward_response.rbs +15 -0
  264. data/sig/finch_api/models/sandbox/company_update_params.rbs +44 -12
  265. data/sig/finch_api/models/sandbox/company_update_response.rbs +31 -0
  266. data/sig/finch_api/models/sandbox/connection_create_params.rbs +8 -0
  267. data/sig/finch_api/models/sandbox/connection_create_response.rbs +11 -0
  268. data/sig/finch_api/models/sandbox/connections/account_create_params.rbs +8 -0
  269. data/sig/finch_api/models/sandbox/connections/account_create_response.rbs +10 -0
  270. data/sig/finch_api/models/sandbox/connections/account_update_params.rbs +5 -0
  271. data/sig/finch_api/models/sandbox/connections/account_update_response.rbs +9 -0
  272. data/sig/finch_api/models/sandbox/directory_create_params.rbs +90 -40
  273. data/sig/finch_api/models/sandbox/employment_update_params.rbs +47 -20
  274. data/sig/finch_api/models/sandbox/employment_update_response.rbs +39 -12
  275. data/sig/finch_api/models/sandbox/individual_update_params.rbs +34 -8
  276. data/sig/finch_api/models/sandbox/individual_update_response.rbs +26 -0
  277. data/sig/finch_api/models/sandbox/job_create_params.rbs +5 -0
  278. data/sig/finch_api/models/sandbox/job_create_response.rbs +7 -0
  279. data/sig/finch_api/models/sandbox/jobs/configuration_retrieve_params.rbs +2 -0
  280. data/sig/finch_api/models/sandbox/jobs/configuration_update_params.rbs +2 -0
  281. data/sig/finch_api/models/sandbox/jobs/sandbox_job_configuration.rbs +13 -8
  282. data/sig/finch_api/models/sandbox/payment_create_params.rbs +287 -228
  283. data/sig/finch_api/models/sandbox/payment_create_response.rbs +2 -0
  284. data/sig/finch_api/resources/connect/sessions.rbs +2 -2
  285. data/sig/finch_api/resources/hris/benefits.rbs +1 -1
  286. data/sig/finch_api/resources/hris/company/pay_statement_item.rbs +1 -1
  287. data/sig/finch_api/resources/hris/documents.rbs +1 -1
  288. data/sig/finch_api/resources/sandbox/employment.rbs +2 -2
  289. data/sig/finch_api/resources/sandbox/payment.rbs +2 -2
  290. metadata +5 -5
  291. data/lib/finch_api/models/hris/benefit_list_supported_benefits_response.rb +0 -110
  292. data/rbi/finch_api/models/hris/benefit_list_supported_benefits_response.rbi +0 -290
  293. data/sig/finch_api/models/hris/benefit_list_supported_benefits_response.rbs +0 -79
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eddfa1529c8cfb3c7461b7553fc9ccebd1818115e88bd4a5a733dbcffad435d4
4
- data.tar.gz: 37306b10b432110b7b3ce09d4cd245b97b1dd16fe467b050e78a5a2101e18839
3
+ metadata.gz: a22fefaabfd30029cb7ba2fd611db321dedf41081213b17d39b19defc545c720
4
+ data.tar.gz: 8667b02bf5c30e86fa594cb2772dc8296a08de01452a21c1512f51416fd7c197
5
5
  SHA512:
6
- metadata.gz: 40f142561b69c398322f65338f567b6d7ed4e5c059ee067aaeddb2566be1ef3b1f19d9eac8bb635540cea61f1e1e63815020af5b3dc7ca9a920f8202f42d0a6f
7
- data.tar.gz: 6cf31655554a967db22163906ae8ea254457761f706ea5cdb5d1dbaf920bd4e55c72e4606525bbac868ec3e7b5b38c6c6135b48727f4e0ff717f9acad778bab9
6
+ metadata.gz: 4b54fc4f9e12bfa3b9fca170644621323c6e4d1dc924ea349b5387a2e17dd68e0c262cddeb1e5f150fd8929430c62fa623b052e7eef3eb44d126775bba908723
7
+ data.tar.gz: 29ba1b68aee378643888164f0ccfeea541381e6861a718d2a9e2537143253f6a8ffb6fc885aa68d86845229d4dc9fe1d7969b3425826ed63c52eb246b52e9456
data/CHANGELOG.md CHANGED
@@ -1,5 +1,55 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.0-alpha.20 (2025-06-18)
4
+
5
+ Full Changelog: [v0.1.0-alpha.19...v0.1.0-alpha.20](https://github.com/Finch-API/finch-api-ruby/compare/v0.1.0-alpha.19...v0.1.0-alpha.20)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([6a3cc47](https://github.com/Finch-API/finch-api-ruby/commit/6a3cc47713d3f52d84da946c1f86c328692a71f1))
10
+ * **api:** api update ([055b260](https://github.com/Finch-API/finch-api-ruby/commit/055b260f9607ea1c408510bf19c86390ba515b48))
11
+ * **api:** api update ([6e46c62](https://github.com/Finch-API/finch-api-ruby/commit/6e46c62b78b34d3944136bea9decd9254b9d7b2c))
12
+ * **api:** api update ([68d04c3](https://github.com/Finch-API/finch-api-ruby/commit/68d04c3e38f076254375ef4e1ea24383d7ff7aa2))
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * `to_sorbet_type` should not return branded types ([2819280](https://github.com/Finch-API/finch-api-ruby/commit/281928010fa852dd399354a4561191120e85ad00))
18
+ * **client:** fix PayStatementResponse body ([bb0bb58](https://github.com/Finch-API/finch-api-ruby/commit/bb0bb581ffc994714895363e21f461e2ec82676e))
19
+ * **client:** manual fix ([3774286](https://github.com/Finch-API/finch-api-ruby/commit/3774286f68227085e6f54396290e3de7569bba0d))
20
+ * correctly instantiate sorbet type aliases for enums and unions ([9a84b92](https://github.com/Finch-API/finch-api-ruby/commit/9a84b92df48e001ee28989703cbe8bdd9f461528))
21
+ * default content-type for text in multi-part formdata uploads should be text/plain ([2288848](https://github.com/Finch-API/finch-api-ruby/commit/2288848990739f298069c86ad90d915c1bd88c60))
22
+ * issue where we cannot mutate arrays on base model derivatives ([c4c0158](https://github.com/Finch-API/finch-api-ruby/commit/c4c01587e16d76f1c6b3f5a48414000954dc4805))
23
+ * prevent rubocop from mangling `===` to `is_a?` check ([6301929](https://github.com/Finch-API/finch-api-ruby/commit/6301929d697ae1c006446a12e6c67046e83ef132))
24
+ * sorbet types for enums, and make tapioca detection ignore `tapioca dsl` ([4aaba62](https://github.com/Finch-API/finch-api-ruby/commit/4aaba6261e6c92833ab6e46acb2e2652da843be9))
25
+
26
+
27
+ ### Chores
28
+
29
+ * **ci:** enable for pull requests ([77fdc63](https://github.com/Finch-API/finch-api-ruby/commit/77fdc63fa78dd6356baf44cc3770902bfb83311b))
30
+ * **ci:** link to correct github repo ([6479e22](https://github.com/Finch-API/finch-api-ruby/commit/6479e2217a712d55aac84da1041a88efcbd4f1f2))
31
+ * **docs:** grammar improvements ([0c55f26](https://github.com/Finch-API/finch-api-ruby/commit/0c55f26abe131663cfe8e739b95154172d967085))
32
+ * force utf-8 locale via `RUBYOPT` when formatting ([2f00817](https://github.com/Finch-API/finch-api-ruby/commit/2f008175f0a18dc01a0c2b900c2e692f77b3a0ac))
33
+ * **internal:** version bump ([2b40219](https://github.com/Finch-API/finch-api-ruby/commit/2b4021961b248f64cb9c5564b4199d0c840593fd))
34
+ * refine Yard and Sorbet types and ensure linting is turned on for examples ([e0eb636](https://github.com/Finch-API/finch-api-ruby/commit/e0eb63695b803e35dd9e35a57cd0769a60db7bc7))
35
+ * **tests:** skip endpoints with basic auth ([529b41e](https://github.com/Finch-API/finch-api-ruby/commit/529b41ea3cf67b553d85e36a256cc5d6c4b13800))
36
+ * use fully qualified names for yard annotations and rbs aliases ([98866d5](https://github.com/Finch-API/finch-api-ruby/commit/98866d5133c2afb76b141045f1361705f9bac94a))
37
+ * use sorbet union aliases where available ([37cc1c2](https://github.com/Finch-API/finch-api-ruby/commit/37cc1c27968a448e7bfef8527a0f3105b476de09))
38
+ * whitespaces ([16ff9b3](https://github.com/Finch-API/finch-api-ruby/commit/16ff9b32a68eecb17c5719b354de64fe788bedd4))
39
+
40
+ ## 0.1.0-alpha.19 (2025-05-16)
41
+
42
+ Full Changelog: [v0.1.0-alpha.18...v0.1.0-alpha.19](https://github.com/Finch-API/finch-api-ruby/compare/v0.1.0-alpha.18...v0.1.0-alpha.19)
43
+
44
+ ### Features
45
+
46
+ * **api:** api update ([e7b5270](https://github.com/Finch-API/finch-api-ruby/commit/e7b527009b74ba9ea5a0c681d12627617971ce31))
47
+
48
+
49
+ ### Chores
50
+
51
+ * **internal:** version bump ([4c65aec](https://github.com/Finch-API/finch-api-ruby/commit/4c65aecc566acd9f72c296c003b12bd36acbd8ca))
52
+
3
53
  ## 0.1.0-alpha.18 (2025-05-16)
4
54
 
5
55
  Full Changelog: [v0.1.0-alpha.17...v0.1.0-alpha.18](https://github.com/Finch-API/finch-api-ruby/compare/v0.1.0-alpha.17...v0.1.0-alpha.18)
data/README.md CHANGED
@@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application
17
17
  <!-- x-release-please-start-version -->
18
18
 
19
19
  ```ruby
20
- gem "finch-api", "~> 0.1.0.pre.alpha.18"
20
+ gem "finch-api", "~> 0.1.0.pre.alpha.20"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -170,7 +170,7 @@ puts(page[:my_undocumented_property])
170
170
 
171
171
  #### Undocumented request params
172
172
 
173
- If you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` under the `request_options:` parameter when making a request as seen in examples above.
173
+ If you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` under the `request_options:` parameter when making a request, as seen in the examples above.
174
174
 
175
175
  #### Undocumented endpoints
176
176
 
@@ -188,7 +188,7 @@ response = client.request(
188
188
 
189
189
  ### Concurrency & connection pooling
190
190
 
191
- The `FinchAPI::Client` instances are threadsafe, but only are fork-safe when there are no in-flight HTTP requests.
191
+ The `FinchAPI::Client` instances are threadsafe, but are only are fork-safe when there are no in-flight HTTP requests.
192
192
 
193
193
  Each instance of `FinchAPI::Client` has its own HTTP connection pool with a default size of 99. As such, we recommend instantiating the client once per application in most settings.
194
194
 
@@ -238,7 +238,7 @@ finch.hris.benefits.create(
238
238
  # …
239
239
  )
240
240
 
241
- # Literal values is also permissible:
241
+ # Literal values are also permissible:
242
242
  finch.hris.benefits.create(
243
243
  frequency: :one_time,
244
244
  # …
data/SECURITY.md CHANGED
@@ -16,11 +16,11 @@ before making any information public.
16
16
  ## Reporting Non-SDK Related Security Issues
17
17
 
18
18
  If you encounter security issues that are not directly related to SDKs but pertain to the services
19
- or products provided by Finch please follow the respective company's security reporting guidelines.
19
+ or products provided by Finch, please follow the respective company's security reporting guidelines.
20
20
 
21
21
  ### Finch Terms and Policies
22
22
 
23
- Please contact founders@tryfinch.com for any questions or concerns regarding security of our services.
23
+ Please contact founders@tryfinch.com for any questions or concerns regarding the security of our services.
24
24
 
25
25
  ---
26
26
 
@@ -9,6 +9,28 @@ module FinchAPI
9
9
  end
10
10
 
11
11
  class ConversionError < FinchAPI::Errors::Error
12
+ # @return [StandardError, nil]
13
+ def cause = @cause.nil? ? super : @cause
14
+
15
+ # @api private
16
+ #
17
+ # @param on [Class<StandardError>]
18
+ # @param method [Symbol]
19
+ # @param target [Object]
20
+ # @param value [Object]
21
+ # @param cause [StandardError, nil]
22
+ def initialize(on:, method:, target:, value:, cause: nil)
23
+ cls = on.name.split("::").last
24
+
25
+ message = [
26
+ "Failed to parse #{cls}.#{method} from #{value.class} to #{target.inspect}.",
27
+ "To get the unparsed API response, use #{cls}[#{method.inspect}].",
28
+ cause && "Cause: #{cause.message}"
29
+ ].filter(&:itself).join(" ")
30
+
31
+ @cause = cause
32
+ super(message)
33
+ end
12
34
  end
13
35
 
14
36
  class APIError < FinchAPI::Errors::Error
@@ -19,7 +19,7 @@ module FinchAPI
19
19
  # @return [Array<generic<Elem>>, nil]
20
20
  attr_accessor :individuals
21
21
 
22
- # @return [FinchAPI::Paging]
22
+ # @return [FinchAPI::Models::Paging]
23
23
  attr_accessor :paging
24
24
 
25
25
  # @return [Boolean]
@@ -19,7 +19,7 @@ module FinchAPI
19
19
  # @return [Array<generic<Elem>>, nil]
20
20
  attr_accessor :data
21
21
 
22
- # @return [FinchAPI::Paging]
22
+ # @return [FinchAPI::Models::Paging]
23
23
  attr_accessor :paging
24
24
 
25
25
  # @return [Boolean]
@@ -12,6 +12,7 @@ module FinchAPI
12
12
  # Array of items of a given type.
13
13
  class ArrayOf
14
14
  include FinchAPI::Internal::Type::Converter
15
+ include FinchAPI::Internal::Util::SorbetRuntimeSupport
15
16
 
16
17
  private_class_method :new
17
18
 
@@ -61,10 +62,14 @@ module FinchAPI
61
62
  #
62
63
  # @param state [Hash{Symbol=>Object}] .
63
64
  #
64
- # @option state [Boolean, :strong] :strictness
65
+ # @option state [Boolean] :translate_names
66
+ #
67
+ # @option state [Boolean] :strictness
65
68
  #
66
69
  # @option state [Hash{Symbol=>Object}] :exactness
67
70
  #
71
+ # @option state [Class<StandardError>] :error
72
+ #
68
73
  # @option state [Integer] :branched
69
74
  #
70
75
  # @return [Array<Object>, Object]
@@ -73,6 +78,7 @@ module FinchAPI
73
78
 
74
79
  unless value.is_a?(Array)
75
80
  exactness[:no] += 1
81
+ state[:error] = TypeError.new("#{value.class} can't be coerced into #{Array}")
76
82
  return value
77
83
  end
78
84
 
@@ -110,6 +116,13 @@ module FinchAPI
110
116
  end
111
117
  end
112
118
 
119
+ # @api private
120
+ #
121
+ # @return [Object]
122
+ def to_sorbet_type
123
+ T::Array[FinchAPI::Internal::Util::SorbetRuntimeSupport.to_sorbet_type(item_type)]
124
+ end
125
+
113
126
  # @api private
114
127
  #
115
128
  # @return [generic<Elem>]
@@ -60,7 +60,7 @@ module FinchAPI
60
60
  [FinchAPI::Internal::Type::Converter.type_info(type_info), type_info]
61
61
  end
62
62
 
63
- setter = "#{name_sym}="
63
+ setter = :"#{name_sym}="
64
64
  api_name = info.fetch(:api_name, name_sym)
65
65
  nilable = info.fetch(:nil?, false)
66
66
  const = if required && !nilable
@@ -84,30 +84,61 @@ module FinchAPI
84
84
  type_fn: type_fn
85
85
  }
86
86
 
87
- define_method(setter) { @data.store(name_sym, _1) }
87
+ define_method(setter) do |value|
88
+ target = type_fn.call
89
+ state = FinchAPI::Internal::Type::Converter.new_coerce_state(translate_names: false)
90
+ coerced = FinchAPI::Internal::Type::Converter.coerce(target, value, state: state)
91
+ status = @coerced.store(name_sym, state.fetch(:error) || true)
92
+ stored =
93
+ case [target, status]
94
+ in [FinchAPI::Internal::Type::Converter | Symbol, true]
95
+ coerced
96
+ else
97
+ value
98
+ end
99
+ @data.store(name_sym, stored)
100
+ end
88
101
 
102
+ # rubocop:disable Style/CaseEquality
103
+ # rubocop:disable Metrics/BlockLength
89
104
  define_method(name_sym) do
90
105
  target = type_fn.call
91
- value = @data.fetch(name_sym) { const == FinchAPI::Internal::OMIT ? nil : const }
92
- state = {strictness: :strong, exactness: {yes: 0, no: 0, maybe: 0}, branched: 0}
93
- if (nilable || !required) && value.nil?
94
- nil
95
- else
96
- FinchAPI::Internal::Type::Converter.coerce(
97
- target,
98
- value,
99
- state: state
106
+
107
+ case @coerced[name_sym]
108
+ in true | false if FinchAPI::Internal::Type::Converter === target
109
+ @data.fetch(name_sym)
110
+ in ::StandardError => e
111
+ raise FinchAPI::Errors::ConversionError.new(
112
+ on: self.class,
113
+ method: __method__,
114
+ target: target,
115
+ value: @data.fetch(name_sym),
116
+ cause: e
100
117
  )
118
+ else
119
+ Kernel.then do
120
+ value = @data.fetch(name_sym) { const == FinchAPI::Internal::OMIT ? nil : const }
121
+ state = FinchAPI::Internal::Type::Converter.new_coerce_state(translate_names: false)
122
+ if (nilable || !required) && value.nil?
123
+ nil
124
+ else
125
+ FinchAPI::Internal::Type::Converter.coerce(
126
+ target, value, state: state
127
+ )
128
+ end
129
+ rescue StandardError => e
130
+ raise FinchAPI::Errors::ConversionError.new(
131
+ on: self.class,
132
+ method: __method__,
133
+ target: target,
134
+ value: value,
135
+ cause: e
136
+ )
137
+ end
101
138
  end
102
- rescue StandardError => e
103
- cls = self.class.name.split("::").last
104
- message = [
105
- "Failed to parse #{cls}.#{__method__} from #{value.class} to #{target.inspect}.",
106
- "To get the unparsed API response, use #{cls}[#{__method__.inspect}].",
107
- "Cause: #{e.message}"
108
- ].join(" ")
109
- raise FinchAPI::Errors::ConversionError.new(message)
110
139
  end
140
+ # rubocop:enable Metrics/BlockLength
141
+ # rubocop:enable Style/CaseEquality
111
142
  end
112
143
 
113
144
  # @api private
@@ -207,23 +238,28 @@ module FinchAPI
207
238
  #
208
239
  # @param state [Hash{Symbol=>Object}] .
209
240
  #
210
- # @option state [Boolean, :strong] :strictness
241
+ # @option state [Boolean] :translate_names
242
+ #
243
+ # @option state [Boolean] :strictness
211
244
  #
212
245
  # @option state [Hash{Symbol=>Object}] :exactness
213
246
  #
247
+ # @option state [Class<StandardError>] :error
248
+ #
214
249
  # @option state [Integer] :branched
215
250
  #
216
251
  # @return [self, Object]
217
252
  def coerce(value, state:)
218
253
  exactness = state.fetch(:exactness)
219
254
 
220
- if value.is_a?(self.class)
255
+ if value.is_a?(self)
221
256
  exactness[:yes] += 1
222
257
  return value
223
258
  end
224
259
 
225
260
  unless (val = FinchAPI::Internal::Util.coerce_hash(value)).is_a?(Hash)
226
261
  exactness[:no] += 1
262
+ state[:error] = TypeError.new("#{value.class} can't be coerced into #{Hash}")
227
263
  return value
228
264
  end
229
265
  exactness[:yes] += 1
@@ -231,13 +267,15 @@ module FinchAPI
231
267
  keys = val.keys.to_set
232
268
  instance = new
233
269
  data = instance.to_h
270
+ status = instance.instance_variable_get(:@coerced)
234
271
 
235
272
  # rubocop:disable Metrics/BlockLength
236
273
  fields.each do |name, field|
237
274
  mode, required, target = field.fetch_values(:mode, :required, :type)
238
275
  api_name, nilable, const = field.fetch_values(:api_name, :nilable, :const)
276
+ src_name = state.fetch(:translate_names) ? api_name : name
239
277
 
240
- unless val.key?(api_name)
278
+ unless val.key?(src_name)
241
279
  if required && mode != :dump && const == FinchAPI::Internal::OMIT
242
280
  exactness[nilable ? :maybe : :no] += 1
243
281
  else
@@ -246,9 +284,10 @@ module FinchAPI
246
284
  next
247
285
  end
248
286
 
249
- item = val.fetch(api_name)
250
- keys.delete(api_name)
287
+ item = val.fetch(src_name)
288
+ keys.delete(src_name)
251
289
 
290
+ state[:error] = nil
252
291
  converted =
253
292
  if item.nil? && (nilable || !required)
254
293
  exactness[nilable ? :yes : :maybe] += 1
@@ -262,6 +301,8 @@ module FinchAPI
262
301
  item
263
302
  end
264
303
  end
304
+
305
+ status.store(name, state.fetch(:error) || true)
265
306
  data.store(name, converted)
266
307
  end
267
308
  # rubocop:enable Metrics/BlockLength
@@ -311,6 +352,13 @@ module FinchAPI
311
352
 
312
353
  acc
313
354
  end
355
+
356
+ # @api private
357
+ #
358
+ # @return [Object]
359
+ def to_sorbet_type
360
+ self
361
+ end
314
362
  end
315
363
 
316
364
  class << self
@@ -430,7 +478,18 @@ module FinchAPI
430
478
  # Create a new instance of a model.
431
479
  #
432
480
  # @param data [Hash{Symbol=>Object}, self]
433
- def initialize(data = {}) = (@data = FinchAPI::Internal::Util.coerce_hash!(data).to_h)
481
+ def initialize(data = {})
482
+ @data = {}
483
+ @coerced = {}
484
+ FinchAPI::Internal::Util.coerce_hash!(data).each do
485
+ if self.class.known_fields.key?(_1)
486
+ public_send(:"#{_1}=", _2)
487
+ else
488
+ @data.store(_1, _2)
489
+ @coerced.store(_1, false)
490
+ end
491
+ end
492
+ end
434
493
 
435
494
  class << self
436
495
  # @api private
@@ -10,6 +10,7 @@ module FinchAPI
10
10
  # Ruby has no Boolean class; this is something for models to refer to.
11
11
  class Boolean
12
12
  extend FinchAPI::Internal::Type::Converter
13
+ extend FinchAPI::Internal::Util::SorbetRuntimeSupport
13
14
 
14
15
  private_class_method :new
15
16
 
@@ -30,14 +31,20 @@ module FinchAPI
30
31
  class << self
31
32
  # @api private
32
33
  #
34
+ # Coerce value to Boolean if possible, otherwise return the original value.
35
+ #
33
36
  # @param value [Boolean, Object]
34
37
  #
35
38
  # @param state [Hash{Symbol=>Object}] .
36
39
  #
37
- # @option state [Boolean, :strong] :strictness
40
+ # @option state [Boolean] :translate_names
41
+ #
42
+ # @option state [Boolean] :strictness
38
43
  #
39
44
  # @option state [Hash{Symbol=>Object}] :exactness
40
45
  #
46
+ # @option state [Class<StandardError>] :error
47
+ #
41
48
  # @option state [Integer] :branched
42
49
  #
43
50
  # @return [Boolean, Object]
@@ -56,6 +63,13 @@ module FinchAPI
56
63
  # @option state [Boolean] :can_retry
57
64
  #
58
65
  # @return [Boolean, Object]
66
+
67
+ # @api private
68
+ #
69
+ # @return [Object]
70
+ def to_sorbet_type
71
+ T::Boolean
72
+ end
59
73
  end
60
74
  end
61
75
  end
@@ -15,10 +15,14 @@ module FinchAPI
15
15
  #
16
16
  # @param state [Hash{Symbol=>Object}] .
17
17
  #
18
- # @option state [Boolean, :strong] :strictness
18
+ # @option state [Boolean] :translate_names
19
+ #
20
+ # @option state [Boolean] :strictness
19
21
  #
20
22
  # @option state [Hash{Symbol=>Object}] :exactness
21
23
  #
24
+ # @option state [Class<StandardError>] :error
25
+ #
22
26
  # @option state [Integer] :branched
23
27
  #
24
28
  # @return [Object]
@@ -94,6 +98,21 @@ module FinchAPI
94
98
  end
95
99
  end
96
100
 
101
+ # @api private
102
+ #
103
+ # @param translate_names [Boolean]
104
+ #
105
+ # @return [Hash{Symbol=>Object}]
106
+ def new_coerce_state(translate_names: true)
107
+ {
108
+ translate_names: translate_names,
109
+ strictness: true,
110
+ exactness: {yes: 0, no: 0, maybe: 0},
111
+ error: nil,
112
+ branched: 0
113
+ }
114
+ end
115
+
97
116
  # @api private
98
117
  #
99
118
  # Based on `target`, transform `value` into `target`, to the extent possible:
@@ -110,14 +129,11 @@ module FinchAPI
110
129
  #
111
130
  # @param value [Object]
112
131
  #
113
- # @param state [Hash{Symbol=>Object}] The `strictness` is one of `true`, `false`, or `:strong`. This informs the
114
- # coercion strategy when we have to decide between multiple possible conversion
115
- # targets:
132
+ # @param state [Hash{Symbol=>Object}] The `strictness` is one of `true`, `false`. This informs the coercion strategy
133
+ # when we have to decide between multiple possible conversion targets:
116
134
  #
117
135
  # - `true`: the conversion must be exact, with minimum coercion.
118
136
  # - `false`: the conversion can be approximate, with some coercion.
119
- # - `:strong`: the conversion must be exact, with no coercion, and raise an error
120
- # if not possible.
121
137
  #
122
138
  # The `exactness` is `Hash` with keys being one of `yes`, `no`, or `maybe`. For
123
139
  # any given conversion attempt, the exactness will be updated based on how closely
@@ -130,21 +146,20 @@ module FinchAPI
130
146
  #
131
147
  # See implementation below for more details.
132
148
  #
133
- # @option state [Boolean, :strong] :strictness
149
+ # @option state [Boolean] :translate_names
150
+ #
151
+ # @option state [Boolean] :strictness
134
152
  #
135
153
  # @option state [Hash{Symbol=>Object}] :exactness
136
154
  #
155
+ # @option state [Class<StandardError>] :error
156
+ #
137
157
  # @option state [Integer] :branched
138
158
  #
139
159
  # @return [Object]
140
- def coerce(
141
- target,
142
- value,
143
- state: {strictness: true, exactness: {yes: 0, no: 0, maybe: 0}, branched: 0}
144
- )
145
- # rubocop:disable Lint/SuppressedException
160
+ def coerce(target, value, state: FinchAPI::Internal::Type::Converter.new_coerce_state)
146
161
  # rubocop:disable Metrics/BlockNesting
147
- strictness, exactness = state.fetch_values(:strictness, :exactness)
162
+ exactness = state.fetch(:exactness)
148
163
 
149
164
  case target
150
165
  in FinchAPI::Internal::Type::Converter
@@ -160,29 +175,26 @@ module FinchAPI
160
175
  exactness[value.nil? ? :yes : :maybe] += 1
161
176
  return nil
162
177
  in -> { _1 <= Integer }
163
- if value.is_a?(Integer)
178
+ case value
179
+ in Integer
164
180
  exactness[:yes] += 1
165
181
  return value
166
- elsif strictness == :strong && Integer(value, exception: false) != value
167
- message = "no implicit conversion of #{value.class} into #{target.inspect}"
168
- raise value.is_a?(Numeric) ? ArgumentError.new(message) : TypeError.new(message)
169
182
  else
170
183
  Kernel.then do
171
184
  return Integer(value).tap { exactness[:maybe] += 1 }
172
- rescue ArgumentError, TypeError
185
+ rescue ArgumentError, TypeError => e
186
+ state[:error] = e
173
187
  end
174
188
  end
175
189
  in -> { _1 <= Float }
176
190
  if value.is_a?(Numeric)
177
191
  exactness[:yes] += 1
178
192
  return Float(value)
179
- elsif strictness == :strong
180
- message = "no implicit conversion of #{value.class} into #{target.inspect}"
181
- raise TypeError.new(message)
182
193
  else
183
194
  Kernel.then do
184
195
  return Float(value).tap { exactness[:maybe] += 1 }
185
- rescue ArgumentError, TypeError
196
+ rescue ArgumentError, TypeError => e
197
+ state[:error] = e
186
198
  end
187
199
  end
188
200
  in -> { _1 <= String }
@@ -194,16 +206,13 @@ module FinchAPI
194
206
  exactness[:yes] += 1
195
207
  return value.string
196
208
  else
197
- if strictness == :strong
198
- message = "no implicit conversion of #{value.class} into #{target.inspect}"
199
- raise TypeError.new(message)
200
- end
209
+ state[:error] = TypeError.new("#{value.class} can't be coerced into #{String}")
201
210
  end
202
211
  in -> { _1 <= Date || _1 <= Time }
203
212
  Kernel.then do
204
213
  return target.parse(value).tap { exactness[:yes] += 1 }
205
214
  rescue ArgumentError, TypeError => e
206
- raise e if strictness == :strong
215
+ state[:error] = e
207
216
  end
208
217
  in -> { _1 <= StringIO } if value.is_a?(String)
209
218
  exactness[:yes] += 1
@@ -221,10 +230,8 @@ module FinchAPI
221
230
  return value
222
231
  end
223
232
  else
224
- if strictness == :strong
225
- message = "cannot convert non-matching #{value.class} into #{target.inspect}"
226
- raise ArgumentError.new(message)
227
- end
233
+ message = "cannot convert non-matching #{value.class} into #{target.inspect}"
234
+ state[:error] = ArgumentError.new(message)
228
235
  end
229
236
  else
230
237
  end
@@ -232,7 +239,6 @@ module FinchAPI
232
239
  exactness[:no] += 1
233
240
  value
234
241
  # rubocop:enable Metrics/BlockNesting
235
- # rubocop:enable Lint/SuppressedException
236
242
  end
237
243
 
238
244
  # @api private
@@ -277,8 +283,10 @@ module FinchAPI
277
283
  define_sorbet_constant!(:CoerceState) do
278
284
  T.type_alias do
279
285
  {
280
- strictness: T.any(T::Boolean, Symbol),
286
+ translate_names: T::Boolean,
287
+ strictness: T::Boolean,
281
288
  exactness: {yes: Integer, no: Integer, maybe: Integer},
289
+ error: T::Class[StandardError],
282
290
  branched: Integer
283
291
  }
284
292
  end
@@ -81,10 +81,14 @@ module FinchAPI
81
81
  #
82
82
  # @param state [Hash{Symbol=>Object}] .
83
83
  #
84
- # @option state [Boolean, :strong] :strictness
84
+ # @option state [Boolean] :translate_names
85
+ #
86
+ # @option state [Boolean] :strictness
85
87
  #
86
88
  # @option state [Hash{Symbol=>Object}] :exactness
87
89
  #
90
+ # @option state [Class<StandardError>] :error
91
+ #
88
92
  # @option state [Integer] :branched
89
93
  #
90
94
  # @return [Symbol, Object]
@@ -95,8 +99,12 @@ module FinchAPI
95
99
  if values.include?(val)
96
100
  exactness[:yes] += 1
97
101
  val
102
+ elsif values.first&.class == val.class
103
+ exactness[:maybe] += 1
104
+ value
98
105
  else
99
- exactness[values.first&.class == val.class ? :maybe : :no] += 1
106
+ exactness[:no] += 1
107
+ state[:error] = TypeError.new("#{value.class} can't be coerced into #{self}")
100
108
  value
101
109
  end
102
110
  end
@@ -112,6 +120,21 @@ module FinchAPI
112
120
  #
113
121
  # @return [Symbol, Object]
114
122
 
123
+ # @api private
124
+ #
125
+ # @return [Object]
126
+ def to_sorbet_type
127
+ types = values.map { FinchAPI::Internal::Util::SorbetRuntimeSupport.to_sorbet_type(_1) }.uniq
128
+ case types
129
+ in []
130
+ T.noreturn
131
+ in [type]
132
+ type
133
+ else
134
+ T.any(*types)
135
+ end
136
+ end
137
+
115
138
  # @api private
116
139
  #
117
140
  # @param depth [Integer]