finch-api 0.1.0.pre.alpha.19 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -0
- data/README.md +4 -4
- data/SECURITY.md +2 -2
- data/lib/finch_api/errors.rb +22 -0
- data/lib/finch_api/internal/individuals_page.rb +1 -1
- data/lib/finch_api/internal/page.rb +1 -1
- data/lib/finch_api/internal/type/array_of.rb +14 -1
- data/lib/finch_api/internal/type/base_model.rb +84 -25
- data/lib/finch_api/internal/type/boolean.rb +15 -1
- data/lib/finch_api/internal/type/converter.rb +42 -34
- data/lib/finch_api/internal/type/enum.rb +25 -2
- data/lib/finch_api/internal/type/file_input.rb +13 -1
- data/lib/finch_api/internal/type/hash_of.rb +14 -1
- data/lib/finch_api/internal/type/union.rb +27 -7
- data/lib/finch_api/internal/type/unknown.rb +15 -1
- data/lib/finch_api/internal/util.rb +62 -10
- data/lib/finch_api/internal.rb +3 -0
- data/lib/finch_api/models/account_update_event.rb +110 -109
- data/lib/finch_api/models/base_webhook_event.rb +1 -1
- data/lib/finch_api/models/company_event.rb +2 -2
- data/lib/finch_api/models/connect/session_new_params.rb +12 -12
- data/lib/finch_api/models/connect/session_reauthenticate_params.rb +2 -2
- data/lib/finch_api/models/create_access_token_response.rb +7 -7
- data/lib/finch_api/models/directory_event.rb +4 -4
- data/lib/finch_api/models/employment_event.rb +4 -4
- data/lib/finch_api/models/hris/benefit_contribution.rb +3 -3
- data/lib/finch_api/models/hris/benefit_create_params.rb +11 -11
- data/lib/finch_api/models/hris/benefit_features_and_operations.rb +5 -120
- data/lib/finch_api/models/hris/benefit_type.rb +10 -10
- data/lib/finch_api/models/hris/benefits/individual_benefit.rb +11 -11
- data/lib/finch_api/models/hris/benefits/individual_enroll_many_params.rb +23 -23
- data/lib/finch_api/models/hris/benefits_support.rb +24 -24
- data/lib/finch_api/models/hris/company/pay_statement_item/rule_create_params.rb +11 -11
- data/lib/finch_api/models/hris/company/pay_statement_item_list_params.rb +2 -2
- data/lib/finch_api/models/hris/company/pay_statement_item_list_response.rb +18 -18
- data/lib/finch_api/models/hris/company.rb +23 -23
- data/lib/finch_api/models/hris/company_benefit.rb +12 -12
- data/lib/finch_api/models/hris/document_list_params.rb +2 -2
- data/lib/finch_api/models/hris/document_list_response.rb +4 -4
- data/lib/finch_api/models/hris/document_response.rb +4 -4
- data/lib/finch_api/models/hris/document_retreive_response.rb +1 -5
- data/lib/finch_api/models/hris/employment_data.rb +89 -100
- data/lib/finch_api/models/hris/employment_data_response.rb +2 -2
- data/lib/finch_api/models/hris/employment_retrieve_many_params.rb +4 -3
- data/lib/finch_api/models/hris/individual.rb +20 -26
- data/lib/finch_api/models/hris/individual_in_directory.rb +6 -6
- data/lib/finch_api/models/hris/individual_response.rb +2 -2
- data/lib/finch_api/models/hris/individual_retrieve_many_params.rb +4 -4
- data/lib/finch_api/models/hris/pay_statement.rb +184 -182
- data/lib/finch_api/models/hris/pay_statement_data_sync_in_progress.rb +76 -0
- data/lib/finch_api/models/hris/pay_statement_response.rb +50 -8
- data/lib/finch_api/models/hris/pay_statement_response_body.rb +27 -9
- data/lib/finch_api/models/hris/pay_statement_retrieve_many_params.rb +2 -2
- data/lib/finch_api/models/hris/payment.rb +37 -37
- data/lib/finch_api/models/hris/support_per_benefit_type.rb +4 -4
- data/lib/finch_api/models/hris/supported_benefit.rb +10 -9
- data/lib/finch_api/models/hris/w42005.rb +12 -12
- data/lib/finch_api/models/hris/w42020.rb +10 -10
- data/lib/finch_api/models/income.rb +8 -8
- data/lib/finch_api/models/individual_event.rb +4 -4
- data/lib/finch_api/models/introspection.rb +23 -23
- data/lib/finch_api/models/job_completion_event.rb +4 -4
- data/lib/finch_api/models/jobs/automated_async_job.rb +10 -10
- data/lib/finch_api/models/jobs/automated_create_params.rb +4 -4
- data/lib/finch_api/models/jobs/automated_list_response.rb +2 -2
- data/lib/finch_api/models/jobs/manual_async_job.rb +3 -3
- data/lib/finch_api/models/money.rb +4 -4
- data/lib/finch_api/models/operation_support_matrix.rb +9 -9
- data/lib/finch_api/models/pay_statement_event.rb +4 -4
- data/lib/finch_api/models/payment_event.rb +4 -4
- data/lib/finch_api/models/payroll/pay_group_list_response.rb +12 -12
- data/lib/finch_api/models/payroll/pay_group_retrieve_response.rb +5 -5
- data/lib/finch_api/models/provider.rb +104 -104
- data/lib/finch_api/models/sandbox/company_update_params.rb +21 -21
- data/lib/finch_api/models/sandbox/company_update_response.rb +2 -2
- data/lib/finch_api/models/sandbox/connection_create_params.rb +2 -2
- data/lib/finch_api/models/sandbox/connections/account_create_params.rb +2 -2
- data/lib/finch_api/models/sandbox/connections/account_update_params.rb +2 -2
- data/lib/finch_api/models/sandbox/directory_create_params.rb +49 -48
- data/lib/finch_api/models/sandbox/employment_update_params.rb +24 -23
- data/lib/finch_api/models/sandbox/employment_update_response.rb +6 -6
- data/lib/finch_api/models/sandbox/individual_update_params.rb +16 -16
- data/lib/finch_api/models/sandbox/individual_update_response.rb +2 -2
- data/lib/finch_api/models/sandbox/job_create_params.rb +2 -2
- data/lib/finch_api/models/sandbox/jobs/sandbox_job_configuration.rb +6 -6
- data/lib/finch_api/models/sandbox/payment_create_params.rb +160 -367
- data/lib/finch_api/models/webhook_event.rb +1 -16
- data/lib/finch_api/models.rb +30 -19
- data/lib/finch_api/resources/access_tokens.rb +1 -1
- data/lib/finch_api/resources/account.rb +2 -2
- data/lib/finch_api/resources/connect/sessions.rb +5 -5
- data/lib/finch_api/resources/hris/benefits/individuals.rb +4 -4
- data/lib/finch_api/resources/hris/benefits.rb +9 -9
- data/lib/finch_api/resources/hris/company/pay_statement_item/rules.rb +3 -3
- data/lib/finch_api/resources/hris/company/pay_statement_item.rb +1 -1
- data/lib/finch_api/resources/hris/company.rb +1 -1
- data/lib/finch_api/resources/hris/directory.rb +1 -1
- data/lib/finch_api/resources/hris/documents.rb +2 -2
- data/lib/finch_api/resources/hris/employments.rb +2 -2
- data/lib/finch_api/resources/hris/individuals.rb +3 -3
- data/lib/finch_api/resources/hris/pay_statements.rb +2 -2
- data/lib/finch_api/resources/hris/payments.rb +1 -1
- data/lib/finch_api/resources/jobs/automated.rb +3 -3
- data/lib/finch_api/resources/jobs/manual.rb +1 -1
- data/lib/finch_api/resources/providers.rb +1 -1
- data/lib/finch_api/resources/sandbox/company.rb +4 -4
- data/lib/finch_api/resources/sandbox/connections/accounts.rb +2 -2
- data/lib/finch_api/resources/sandbox/connections.rb +1 -1
- data/lib/finch_api/resources/sandbox/directory.rb +1 -1
- data/lib/finch_api/resources/sandbox/employment.rb +8 -8
- data/lib/finch_api/resources/sandbox/individual.rb +5 -5
- data/lib/finch_api/resources/sandbox/jobs/configuration.rb +4 -4
- data/lib/finch_api/resources/sandbox/jobs.rb +1 -1
- data/lib/finch_api/resources/sandbox/payment.rb +6 -3
- data/lib/finch_api/version.rb +1 -1
- data/lib/finch_api.rb +4 -2
- data/rbi/finch_api/errors.rbi +16 -0
- data/rbi/finch_api/internal/type/array_of.rbi +6 -0
- data/rbi/finch_api/internal/type/base_model.rbi +5 -0
- data/rbi/finch_api/internal/type/boolean.rbi +8 -0
- data/rbi/finch_api/internal/type/converter.rbi +15 -15
- data/rbi/finch_api/internal/type/enum.rbi +5 -0
- data/rbi/finch_api/internal/type/file_input.rbi +5 -0
- data/rbi/finch_api/internal/type/hash_of.rbi +6 -0
- data/rbi/finch_api/internal/type/union.rbi +10 -0
- data/rbi/finch_api/internal/type/unknown.rbi +8 -0
- data/rbi/finch_api/internal/util.rbi +36 -0
- data/rbi/finch_api/internal.rbi +3 -0
- data/rbi/finch_api/models/connect/session_new_params.rbi +4 -4
- data/rbi/finch_api/models/hris/benefit_features_and_operations.rbi +4 -296
- data/rbi/finch_api/models/hris/benefit_type.rbi +16 -16
- data/rbi/finch_api/models/hris/company/pay_statement_item_list_response.rbi +18 -33
- data/rbi/finch_api/models/hris/employment_data.rbi +123 -141
- data/rbi/finch_api/models/hris/employment_data_response.rbi +2 -13
- data/rbi/finch_api/models/hris/individual_response.rbi +2 -13
- data/rbi/finch_api/models/hris/pay_statement.rbi +275 -307
- data/rbi/finch_api/models/hris/pay_statement_data_sync_in_progress.rbi +188 -0
- data/rbi/finch_api/models/hris/pay_statement_response.rbi +84 -20
- data/rbi/finch_api/models/hris/pay_statement_response_body.rbi +45 -17
- data/rbi/finch_api/models/hris/payment.rbi +27 -30
- data/rbi/finch_api/models/hris/supported_benefit.rbi +12 -8
- data/rbi/finch_api/models/income.rbi +3 -3
- data/rbi/finch_api/models/money.rbi +4 -7
- data/rbi/finch_api/models/payroll/pay_group_list_response.rbi +25 -43
- data/rbi/finch_api/models/payroll/pay_group_retrieve_response.rbi +14 -14
- data/rbi/finch_api/models/sandbox/payment_create_params.rbi +463 -727
- data/rbi/finch_api/resources/connect/sessions.rbi +2 -2
- data/rbi/finch_api/resources/hris/benefits.rbi +1 -3
- data/rbi/finch_api/resources/hris/documents.rbi +1 -1
- data/rbi/finch_api/resources/sandbox/payment.rbi +3 -2
- data/sig/finch_api/errors.rbs +9 -0
- data/sig/finch_api/internal/type/array_of.rbs +3 -0
- data/sig/finch_api/internal/type/base_model.rbs +2 -0
- data/sig/finch_api/internal/type/boolean.rbs +3 -0
- data/sig/finch_api/internal/type/converter.rbs +7 -1
- data/sig/finch_api/internal/type/enum.rbs +2 -0
- data/sig/finch_api/internal/type/file_input.rbs +2 -0
- data/sig/finch_api/internal/type/hash_of.rbs +3 -0
- data/sig/finch_api/internal/type/union.rbs +2 -0
- data/sig/finch_api/internal/type/unknown.rbs +3 -0
- data/sig/finch_api/internal/util.rbs +12 -0
- data/sig/finch_api/internal.rbs +2 -0
- data/sig/finch_api/models/access_token_create_params.rbs +8 -0
- data/sig/finch_api/models/account_disconnect_params.rbs +2 -0
- data/sig/finch_api/models/account_introspect_params.rbs +2 -0
- data/sig/finch_api/models/account_update_event.rbs +230 -12
- data/sig/finch_api/models/base_webhook_event.rbs +6 -0
- data/sig/finch_api/models/company_event.rbs +11 -6
- data/sig/finch_api/models/connect/session_new_params.rbs +26 -8
- data/sig/finch_api/models/connect/session_new_response.rbs +2 -0
- data/sig/finch_api/models/connect/session_reauthenticate_params.rbs +12 -4
- data/sig/finch_api/models/connect/session_reauthenticate_response.rbs +2 -0
- data/sig/finch_api/models/create_access_token_response.rbs +21 -8
- data/sig/finch_api/models/directory_event.rbs +13 -6
- data/sig/finch_api/models/disconnect_response.rbs +2 -0
- data/sig/finch_api/models/employment_event.rbs +13 -6
- data/sig/finch_api/models/hris/benefit_contribution.rbs +12 -4
- data/sig/finch_api/models/hris/benefit_create_params.rbs +21 -6
- data/sig/finch_api/models/hris/benefit_features_and_operations.rbs +9 -78
- data/sig/finch_api/models/hris/benefit_list_params.rbs +2 -0
- data/sig/finch_api/models/hris/benefit_list_supported_benefits_params.rbs +2 -0
- data/sig/finch_api/models/hris/benefit_retrieve_params.rbs +2 -0
- data/sig/finch_api/models/hris/benefit_type.rbs +21 -21
- data/sig/finch_api/models/hris/benefit_update_params.rbs +5 -0
- data/sig/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rbs +2 -0
- data/sig/finch_api/models/hris/benefits/individual_benefit.rbs +18 -4
- data/sig/finch_api/models/hris/benefits/individual_enroll_many_params.rbs +47 -18
- data/sig/finch_api/models/hris/benefits/individual_enrolled_ids_params.rbs +2 -0
- data/sig/finch_api/models/hris/benefits/individual_enrolled_ids_response.rbs +5 -0
- data/sig/finch_api/models/hris/benefits/individual_retrieve_many_benefits_params.rbs +5 -0
- data/sig/finch_api/models/hris/benefits/individual_unenroll_many_params.rbs +5 -0
- data/sig/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rbs +2 -0
- data/sig/finch_api/models/hris/benefits_support.rbs +15 -0
- data/sig/finch_api/models/hris/company/pay_statement_item/rule_create_params.rbs +23 -6
- data/sig/finch_api/models/hris/company/pay_statement_item/rule_create_response.rbs +20 -0
- data/sig/finch_api/models/hris/company/pay_statement_item/rule_delete_params.rbs +2 -0
- data/sig/finch_api/models/hris/company/pay_statement_item/rule_delete_response.rbs +21 -0
- data/sig/finch_api/models/hris/company/pay_statement_item/rule_list_params.rbs +2 -0
- data/sig/finch_api/models/hris/company/pay_statement_item/rule_list_response.rbs +20 -0
- data/sig/finch_api/models/hris/company/pay_statement_item/rule_update_params.rbs +5 -0
- data/sig/finch_api/models/hris/company/pay_statement_item/rule_update_response.rbs +20 -0
- data/sig/finch_api/models/hris/company/pay_statement_item_list_params.rbs +15 -6
- data/sig/finch_api/models/hris/company/pay_statement_item_list_response.rbs +23 -20
- data/sig/finch_api/models/hris/company.rbs +44 -12
- data/sig/finch_api/models/hris/company_benefit.rbs +21 -6
- data/sig/finch_api/models/hris/company_retrieve_params.rbs +2 -0
- data/sig/finch_api/models/hris/create_company_benefits_response.rbs +2 -0
- data/sig/finch_api/models/hris/directory_list_individuals_params.rbs +6 -0
- data/sig/finch_api/models/hris/directory_list_params.rbs +6 -0
- data/sig/finch_api/models/hris/document_list_params.rbs +14 -6
- data/sig/finch_api/models/hris/document_list_response.rbs +5 -0
- data/sig/finch_api/models/hris/document_response.rbs +14 -6
- data/sig/finch_api/models/hris/document_retreive_params.rbs +2 -0
- data/sig/finch_api/models/hris/employment_data.rbs +91 -47
- data/sig/finch_api/models/hris/employment_data_response.rbs +6 -0
- data/sig/finch_api/models/hris/employment_retrieve_many_params.rbs +7 -0
- data/sig/finch_api/models/hris/individual.rbs +49 -16
- data/sig/finch_api/models/hris/individual_in_directory.rbs +14 -0
- data/sig/finch_api/models/hris/individual_response.rbs +6 -0
- data/sig/finch_api/models/hris/individual_retrieve_many_params.rbs +10 -0
- data/sig/finch_api/models/hris/pay_statement.rbs +179 -133
- data/sig/finch_api/models/hris/pay_statement_data_sync_in_progress.rbs +78 -0
- data/sig/finch_api/models/hris/pay_statement_response.rbs +51 -13
- data/sig/finch_api/models/hris/pay_statement_response_body.rbs +24 -11
- data/sig/finch_api/models/hris/pay_statement_retrieve_many_params.rbs +11 -0
- data/sig/finch_api/models/hris/payment.rbs +44 -29
- data/sig/finch_api/models/hris/payment_list_params.rbs +6 -0
- data/sig/finch_api/models/hris/support_per_benefit_type.rbs +5 -0
- data/sig/finch_api/models/hris/supported_benefit.rbs +22 -12
- data/sig/finch_api/models/hris/update_company_benefit_response.rbs +2 -0
- data/sig/finch_api/models/hris/w42005.rbs +30 -16
- data/sig/finch_api/models/hris/w42020.rbs +27 -10
- data/sig/finch_api/models/income.rbs +14 -7
- data/sig/finch_api/models/individual_event.rbs +13 -6
- data/sig/finch_api/models/introspection.rbs +51 -14
- data/sig/finch_api/models/job_completion_event.rbs +13 -6
- data/sig/finch_api/models/jobs/automated_async_job.rbs +22 -8
- data/sig/finch_api/models/jobs/automated_create_params.rbs +8 -0
- data/sig/finch_api/models/jobs/automated_create_response.rbs +7 -0
- data/sig/finch_api/models/jobs/automated_list_params.rbs +6 -0
- data/sig/finch_api/models/jobs/automated_list_response.rbs +18 -0
- data/sig/finch_api/models/jobs/automated_retrieve_params.rbs +2 -0
- data/sig/finch_api/models/jobs/manual_async_job.rbs +10 -4
- data/sig/finch_api/models/jobs/manual_retrieve_params.rbs +2 -0
- data/sig/finch_api/models/location.rbs +11 -0
- data/sig/finch_api/models/money.rbs +3 -3
- data/sig/finch_api/models/operation_support_matrix.rbs +7 -0
- data/sig/finch_api/models/paging.rbs +2 -0
- data/sig/finch_api/models/pay_statement_event.rbs +13 -6
- data/sig/finch_api/models/payment_event.rbs +13 -6
- data/sig/finch_api/models/payroll/pay_group_list_params.rbs +6 -0
- data/sig/finch_api/models/payroll/pay_group_list_response.rbs +22 -24
- data/sig/finch_api/models/payroll/pay_group_retrieve_params.rbs +2 -0
- data/sig/finch_api/models/payroll/pay_group_retrieve_response.rbs +17 -10
- data/sig/finch_api/models/provider.rbs +227 -6
- data/sig/finch_api/models/provider_list_params.rbs +2 -0
- data/sig/finch_api/models/request_forwarding_forward_params.rbs +9 -0
- data/sig/finch_api/models/request_forwarding_forward_response.rbs +15 -0
- data/sig/finch_api/models/sandbox/company_update_params.rbs +44 -12
- data/sig/finch_api/models/sandbox/company_update_response.rbs +31 -0
- data/sig/finch_api/models/sandbox/connection_create_params.rbs +8 -0
- data/sig/finch_api/models/sandbox/connection_create_response.rbs +11 -0
- data/sig/finch_api/models/sandbox/connections/account_create_params.rbs +8 -0
- data/sig/finch_api/models/sandbox/connections/account_create_response.rbs +10 -0
- data/sig/finch_api/models/sandbox/connections/account_update_params.rbs +5 -0
- data/sig/finch_api/models/sandbox/connections/account_update_response.rbs +9 -0
- data/sig/finch_api/models/sandbox/directory_create_params.rbs +84 -28
- data/sig/finch_api/models/sandbox/employment_update_params.rbs +41 -8
- data/sig/finch_api/models/sandbox/employment_update_response.rbs +33 -0
- data/sig/finch_api/models/sandbox/individual_update_params.rbs +34 -8
- data/sig/finch_api/models/sandbox/individual_update_response.rbs +26 -0
- data/sig/finch_api/models/sandbox/job_create_params.rbs +5 -0
- data/sig/finch_api/models/sandbox/job_create_response.rbs +7 -0
- data/sig/finch_api/models/sandbox/jobs/configuration_retrieve_params.rbs +2 -0
- data/sig/finch_api/models/sandbox/jobs/configuration_update_params.rbs +2 -0
- data/sig/finch_api/models/sandbox/jobs/sandbox_job_configuration.rbs +13 -8
- data/sig/finch_api/models/sandbox/payment_create_params.rbs +287 -228
- data/sig/finch_api/models/sandbox/payment_create_response.rbs +2 -0
- data/sig/finch_api/resources/connect/sessions.rbs +2 -2
- data/sig/finch_api/resources/hris/benefits.rbs +1 -1
- data/sig/finch_api/resources/hris/company/pay_statement_item.rbs +1 -1
- data/sig/finch_api/resources/hris/documents.rbs +1 -1
- data/sig/finch_api/resources/sandbox/payment.rbs +2 -2
- metadata +5 -5
- data/lib/finch_api/models/hris/benefit_list_supported_benefits_response.rb +0 -110
- data/rbi/finch_api/models/hris/benefit_list_supported_benefits_response.rbi +0 -290
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a22fefaabfd30029cb7ba2fd611db321dedf41081213b17d39b19defc545c720
|
4
|
+
data.tar.gz: 8667b02bf5c30e86fa594cb2772dc8296a08de01452a21c1512f51416fd7c197
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b54fc4f9e12bfa3b9fca170644621323c6e4d1dc924ea349b5387a2e17dd68e0c262cddeb1e5f150fd8929430c62fa623b052e7eef3eb44d126775bba908723
|
7
|
+
data.tar.gz: 29ba1b68aee378643888164f0ccfeea541381e6861a718d2a9e2537143253f6a8ffb6fc885aa68d86845229d4dc9fe1d7969b3425826ed63c52eb246b52e9456
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,42 @@
|
|
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
|
+
|
3
40
|
## 0.1.0-alpha.19 (2025-05-16)
|
4
41
|
|
5
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)
|
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.
|
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
|
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
|
|
data/lib/finch_api/errors.rb
CHANGED
@@ -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
|
@@ -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
|
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)
|
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
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
FinchAPI::
|
97
|
-
|
98
|
-
|
99
|
-
|
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
|
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
|
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?(
|
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(
|
250
|
-
keys.delete(
|
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 = {})
|
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
|
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
|
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
|
114
|
-
#
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
225
|
-
|
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
|
-
|
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
|
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[
|
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]
|