mindee 4.6.0 → 4.7.0.pre.rc2
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 +20 -0
- data/README.md +21 -222
- data/docs/code_samples/default_v2.txt +28 -0
- data/lib/mindee/client.rb +11 -30
- data/lib/mindee/client_v2.rb +109 -0
- data/lib/mindee/errors/mindee_http_error_v2.rb +26 -0
- data/lib/mindee/errors/mindee_input_error.rb +1 -1
- data/lib/mindee/errors.rb +1 -0
- data/lib/mindee/geometry/point.rb +2 -2
- data/lib/mindee/geometry/quadrilateral.rb +4 -4
- data/lib/mindee/geometry/utils.rb +1 -0
- data/lib/mindee/http/api_settings_v2.rb +61 -0
- data/lib/mindee/http/endpoint.rb +12 -6
- data/lib/mindee/http/http_error_handler.rb +17 -4
- data/lib/mindee/http/mindee_api_v2.rb +148 -0
- data/lib/mindee/http/response_validation.rb +20 -1
- data/lib/mindee/http/workflow_endpoint.rb +2 -2
- data/lib/mindee/http.rb +2 -0
- data/lib/mindee/image/extracted_image.rb +1 -1
- data/lib/mindee/image/image_extractor.rb +12 -15
- data/lib/mindee/input/inference_parameters.rb +116 -0
- data/lib/mindee/input/local_response.rb +10 -1
- data/lib/mindee/input/polling_options.rb +26 -0
- data/lib/mindee/input/sources/base64_input_source.rb +2 -2
- data/lib/mindee/input/sources/local_input_source.rb +49 -30
- data/lib/mindee/input.rb +2 -0
- data/lib/mindee/page_options.rb +24 -0
- data/lib/mindee/parsing/common/api_request.rb +2 -2
- data/lib/mindee/parsing/common/api_response.rb +4 -0
- data/lib/mindee/parsing/common/execution.rb +1 -1
- data/lib/mindee/parsing/common/extras/extras.rb +2 -2
- data/lib/mindee/parsing/common/extras/rag_extra.rb +2 -0
- data/lib/mindee/parsing/common/ocr/ocr.rb +4 -6
- data/lib/mindee/parsing/common/orientation.rb +2 -2
- data/lib/mindee/parsing/common/product.rb +6 -1
- data/lib/mindee/parsing/standard/amount_field.rb +2 -2
- data/lib/mindee/parsing/standard/feature_field.rb +1 -1
- data/lib/mindee/parsing/standard/tax_field.rb +1 -1
- data/lib/mindee/parsing/universal/universal_list_field.rb +2 -2
- data/lib/mindee/parsing/universal/universal_object_field.rb +7 -4
- data/lib/mindee/parsing/v2/common_response.rb +18 -0
- data/lib/mindee/parsing/v2/error_response.rb +36 -0
- data/lib/mindee/parsing/v2/field/base_field.rb +60 -0
- data/lib/mindee/parsing/v2/field/field_confidence.rb +91 -0
- data/lib/mindee/parsing/v2/field/field_location.rb +36 -0
- data/lib/mindee/parsing/v2/field/inference_fields.rb +96 -0
- data/lib/mindee/parsing/v2/field/list_field.rb +88 -0
- data/lib/mindee/parsing/v2/field/object_field.rb +102 -0
- data/lib/mindee/parsing/v2/field/simple_field.rb +55 -0
- data/lib/mindee/parsing/v2/field.rb +9 -0
- data/lib/mindee/parsing/v2/inference.rb +50 -0
- data/lib/mindee/parsing/v2/inference_file.rb +38 -0
- data/lib/mindee/parsing/v2/inference_model.rb +18 -0
- data/lib/mindee/parsing/v2/inference_response.rb +30 -0
- data/lib/mindee/parsing/v2/inference_result.rb +49 -0
- data/lib/mindee/parsing/v2/inference_result_options.rb +21 -0
- data/lib/mindee/parsing/v2/job.rb +86 -0
- data/lib/mindee/parsing/v2/job_response.rb +30 -0
- data/lib/mindee/parsing/v2/job_webhook.rb +60 -0
- data/lib/mindee/parsing/v2/raw_text.rb +21 -0
- data/lib/mindee/parsing/v2.rb +15 -0
- data/lib/mindee/pdf/extracted_pdf.rb +5 -3
- data/lib/mindee/pdf/pdf_extractor.rb +11 -7
- data/lib/mindee/pdf/pdf_processor.rb +6 -6
- data/lib/mindee/pdf/pdf_tools.rb +6 -4
- data/lib/mindee/product/universal/universal_prediction.rb +4 -4
- data/lib/mindee/version.rb +2 -2
- data/lib/mindee.rb +6 -0
- data/mindee.gemspec +1 -1
- data/sig/custom/mini_magick.rbs +14 -7
- data/sig/custom/net_http.rbs +4 -4
- data/sig/custom/origami.rbs +9 -4
- data/sig/mindee/client.rbs +14 -19
- data/sig/mindee/client_v2.rbs +17 -0
- data/sig/mindee/errors/mindee_http_error.rbs +6 -5
- data/sig/mindee/errors/mindee_http_error_v2.rbs +12 -0
- data/sig/mindee/errors/mindee_input_error.rbs +3 -2
- data/sig/mindee/geometry/min_max.rbs +4 -3
- data/sig/mindee/geometry/point.rbs +5 -6
- data/sig/mindee/geometry/polygon.rbs +3 -3
- data/sig/mindee/geometry/quadrilateral.rbs +5 -8
- data/sig/mindee/geometry/utils.rbs +8 -8
- data/sig/mindee/http/api_settings_v2.rbs +23 -0
- data/sig/mindee/http/endpoint.rbs +12 -11
- data/sig/mindee/http/http_error_handler.rbs +8 -3
- data/sig/mindee/http/mindee_api_v2.rbs +18 -0
- data/sig/mindee/http/response_validation.rbs +1 -0
- data/sig/mindee/http/workflow_endpoint.rbs +1 -1
- data/sig/mindee/image/extracted_image.rbs +2 -2
- data/sig/mindee/image/image_compressor.rbs +1 -1
- data/sig/mindee/image/image_extractor.rbs +5 -5
- data/sig/mindee/image/image_utils.rbs +10 -10
- data/sig/mindee/input/inference_parameters.rbs +30 -0
- data/sig/mindee/input/local_response.rbs +6 -5
- data/sig/mindee/input/polling_options.rbs +12 -0
- data/sig/mindee/input/sources/base64_input_source.rbs +1 -1
- data/sig/mindee/input/sources/local_input_source.rbs +14 -7
- data/sig/mindee/input/sources/url_input_source.rbs +1 -1
- data/sig/mindee/logging/logger.rbs +2 -0
- data/sig/mindee/page_options.rbs +11 -0
- data/sig/mindee/parsing/common/api_request.rbs +6 -6
- data/sig/mindee/parsing/common/api_response.rbs +2 -2
- data/sig/mindee/parsing/common/document.rbs +10 -10
- data/sig/mindee/parsing/common/execution.rbs +15 -14
- data/sig/mindee/parsing/common/execution_file.rbs +3 -3
- data/sig/mindee/parsing/common/extras/cropper_extra.rbs +3 -2
- data/sig/mindee/parsing/common/extras/extras.rbs +6 -5
- data/sig/mindee/parsing/common/extras/full_text_ocr_extra.rbs +2 -1
- data/sig/mindee/parsing/common/inference.rbs +16 -9
- data/sig/mindee/parsing/common/job.rbs +2 -2
- data/sig/mindee/parsing/common/ocr/mvision_v1.rbs +2 -2
- data/sig/mindee/parsing/common/ocr/ocr.rbs +22 -20
- data/sig/mindee/parsing/common/orientation.rbs +4 -3
- data/sig/mindee/parsing/common/page.rbs +6 -5
- data/sig/mindee/parsing/common/product.rbs +4 -4
- data/sig/mindee/parsing/common/workflow_response.rbs +8 -4
- data/sig/mindee/parsing/standard/abstract_field.rbs +1 -1
- data/sig/mindee/parsing/standard/address_field.rbs +1 -1
- data/sig/mindee/parsing/standard/amount_field.rbs +6 -4
- data/sig/mindee/parsing/standard/base_field.rbs +1 -1
- data/sig/mindee/parsing/standard/boolean_field.rbs +1 -1
- data/sig/mindee/parsing/standard/company_registration_field.rbs +3 -2
- data/sig/mindee/parsing/standard/date_field.rbs +6 -6
- data/sig/mindee/parsing/standard/locale_field.rbs +1 -1
- data/sig/mindee/parsing/standard/payment_details_field.rbs +7 -6
- data/sig/mindee/parsing/standard/position_field.rbs +2 -2
- data/sig/mindee/parsing/standard/string_field.rbs +1 -1
- data/sig/mindee/parsing/standard/tax_field.rbs +8 -7
- data/sig/mindee/parsing/universal/universal_list_field.rbs +4 -5
- data/sig/mindee/parsing/universal/universal_object_field.rbs +17 -11
- data/sig/mindee/parsing/v2/common_response.rbs +11 -0
- data/sig/mindee/parsing/v2/error_response.rbs +16 -0
- data/sig/mindee/parsing/v2/field/base_field.rbs +17 -0
- data/sig/mindee/parsing/v2/field/field_confidence.rbs +27 -0
- data/sig/mindee/parsing/v2/field/field_location.rbs +16 -0
- data/sig/mindee/parsing/v2/field/inference_fields.rbs +19 -0
- data/sig/mindee/parsing/v2/field/list_field.rbs +21 -0
- data/sig/mindee/parsing/v2/field/object_field.rbs +21 -0
- data/sig/mindee/parsing/v2/field/simple_field.rbs +16 -0
- data/sig/mindee/parsing/v2/inference.rbs +16 -0
- data/sig/mindee/parsing/v2/inference_file.rbs +15 -0
- data/sig/mindee/parsing/v2/inference_model.rbs +11 -0
- data/sig/mindee/parsing/v2/inference_response.rbs +12 -0
- data/sig/mindee/parsing/v2/inference_result.rbs +13 -0
- data/sig/mindee/parsing/v2/inference_result_options.rbs +11 -0
- data/sig/mindee/parsing/v2/job.rbs +22 -0
- data/sig/mindee/parsing/v2/job_response.rbs +12 -0
- data/sig/mindee/parsing/v2/job_webhook.rbs +17 -0
- data/sig/mindee/parsing/v2/raw_text.rbs +12 -0
- data/sig/mindee/pdf/extracted_pdf.rbs +6 -6
- data/sig/mindee/pdf/pdf_compressor.rbs +4 -4
- data/sig/mindee/pdf/pdf_extractor.rbs +8 -7
- data/sig/mindee/pdf/pdf_processor.rbs +4 -4
- data/sig/mindee/pdf/pdf_tools.rbs +22 -16
- data/sig/mindee/product/barcode_reader/barcode_reader_v1.rbs +1 -1
- data/sig/mindee/product/barcode_reader/barcode_reader_v1_document.rbs +1 -1
- data/sig/mindee/product/barcode_reader/barcode_reader_v1_page.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1.rbs +1 -1
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_carrier.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_carrier_item.rbs +3 -3
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_consignee.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_document.rbs +1 -1
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_notify_party.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_page.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_shipper.rbs +2 -2
- data/sig/mindee/product/business_card/business_card_v1.rbs +1 -1
- data/sig/mindee/product/business_card/business_card_v1_document.rbs +1 -1
- data/sig/mindee/product/business_card/business_card_v1_page.rbs +2 -2
- data/sig/mindee/product/cropper/cropper_v1.rbs +1 -1
- data/sig/mindee/product/cropper/cropper_v1_document.rbs +1 -1
- data/sig/mindee/product/cropper/cropper_v1_page.rbs +2 -2
- data/sig/mindee/product/delivery_note/delivery_note_v1.rbs +1 -1
- data/sig/mindee/product/delivery_note/delivery_note_v1_document.rbs +1 -1
- data/sig/mindee/product/delivery_note/delivery_note_v1_page.rbs +2 -2
- data/sig/mindee/product/driver_license/driver_license_v1.rbs +1 -1
- data/sig/mindee/product/driver_license/driver_license_v1_document.rbs +1 -1
- data/sig/mindee/product/driver_license/driver_license_v1_page.rbs +2 -2
- data/sig/mindee/product/financial_document/financial_document_v1.rbs +1 -1
- data/sig/mindee/product/financial_document/financial_document_v1_document.rbs +1 -1
- data/sig/mindee/product/financial_document/financial_document_v1_line_item.rbs +3 -3
- data/sig/mindee/product/financial_document/financial_document_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v1.rbs +1 -1
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2.rbs +1 -1
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2_bban.rbs +2 -2
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2_document.rbs +1 -1
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2_page.rbs +2 -2
- data/sig/mindee/product/fr/bank_statement/bank_statement_v2.rbs +1 -1
- data/sig/mindee/product/fr/bank_statement/bank_statement_v2_document.rbs +1 -1
- data/sig/mindee/product/fr/bank_statement/bank_statement_v2_page.rbs +2 -2
- data/sig/mindee/product/fr/bank_statement/bank_statement_v2_transaction.rbs +3 -3
- data/sig/mindee/product/fr/carte_grise/carte_grise_v1.rbs +1 -1
- data/sig/mindee/product/fr/carte_grise/carte_grise_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/carte_grise/carte_grise_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1.rbs +1 -1
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_energy_consumer.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_energy_supplier.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_energy_usage.rbs +3 -3
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_meter_detail.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_subscription.rbs +3 -3
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_taxes_and_contribution.rbs +3 -3
- data/sig/mindee/product/fr/health_card/health_card_v1.rbs +1 -1
- data/sig/mindee/product/fr/health_card/health_card_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/health_card/health_card_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/id_card/id_card_v1.rbs +1 -1
- data/sig/mindee/product/fr/id_card/id_card_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/id_card/id_card_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/id_card/id_card_v2.rbs +1 -1
- data/sig/mindee/product/fr/id_card/id_card_v2_document.rbs +1 -1
- data/sig/mindee/product/fr/id_card/id_card_v2_page.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2.rbs +1 -1
- data/sig/mindee/product/fr/payslip/payslip_v2_bank_account_detail.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_document.rbs +1 -1
- data/sig/mindee/product/fr/payslip/payslip_v2_employee.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_employer.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_employment.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_page.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_pay_detail.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_pay_period.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_pto.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_salary_detail.rbs +3 -3
- data/sig/mindee/product/fr/payslip/payslip_v3.rbs +1 -1
- data/sig/mindee/product/fr/payslip/payslip_v3_bank_account_detail.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_document.rbs +1 -1
- data/sig/mindee/product/fr/payslip/payslip_v3_employee.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_employer.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_employment.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_page.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_paid_time_off.rbs +3 -3
- data/sig/mindee/product/fr/payslip/payslip_v3_pay_detail.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_pay_period.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_salary_detail.rbs +3 -3
- data/sig/mindee/product/ind/indian_passport/indian_passport_v1.rbs +1 -1
- data/sig/mindee/product/ind/indian_passport/indian_passport_v1_document.rbs +1 -1
- data/sig/mindee/product/ind/indian_passport/indian_passport_v1_page.rbs +2 -2
- data/sig/mindee/product/international_id/international_id_v2.rbs +1 -1
- data/sig/mindee/product/international_id/international_id_v2_document.rbs +1 -1
- data/sig/mindee/product/international_id/international_id_v2_page.rbs +2 -2
- data/sig/mindee/product/invoice/invoice_v4.rbs +1 -1
- data/sig/mindee/product/invoice/invoice_v4_document.rbs +1 -1
- data/sig/mindee/product/invoice/invoice_v4_line_item.rbs +3 -3
- data/sig/mindee/product/invoice/invoice_v4_page.rbs +2 -2
- data/sig/mindee/product/invoice_splitter/invoice_splitter_v1.rbs +1 -1
- data/sig/mindee/product/invoice_splitter/invoice_splitter_v1_document.rbs +1 -1
- data/sig/mindee/product/invoice_splitter/invoice_splitter_v1_invoice_page_group.rbs +3 -3
- data/sig/mindee/product/invoice_splitter/invoice_splitter_v1_page.rbs +2 -2
- data/sig/mindee/product/multi_receipts_detector/multi_receipts_detector_v1.rbs +1 -1
- data/sig/mindee/product/multi_receipts_detector/multi_receipts_detector_v1_document.rbs +1 -1
- data/sig/mindee/product/multi_receipts_detector/multi_receipts_detector_v1_page.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1.rbs +1 -1
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_added_sugar.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_calorie.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_cholesterol.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_dietary_fiber.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_document.rbs +1 -1
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_nutrient.rbs +3 -3
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_page.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_protein.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_saturated_fat.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_serving_size.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_sodium.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_carbohydrate.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_fat.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_sugar.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_trans_fat.rbs +2 -2
- data/sig/mindee/product/passport/passport_v1.rbs +1 -1
- data/sig/mindee/product/passport/passport_v1_document.rbs +1 -1
- data/sig/mindee/product/passport/passport_v1_page.rbs +2 -2
- data/sig/mindee/product/receipt/receipt_v5.rbs +1 -1
- data/sig/mindee/product/receipt/receipt_v5_document.rbs +1 -1
- data/sig/mindee/product/receipt/receipt_v5_line_item.rbs +3 -3
- data/sig/mindee/product/receipt/receipt_v5_page.rbs +2 -2
- data/sig/mindee/product/resume/resume_v1.rbs +1 -1
- data/sig/mindee/product/resume/resume_v1_certificate.rbs +3 -3
- data/sig/mindee/product/resume/resume_v1_document.rbs +1 -1
- data/sig/mindee/product/resume/resume_v1_education.rbs +3 -3
- data/sig/mindee/product/resume/resume_v1_language.rbs +3 -3
- data/sig/mindee/product/resume/resume_v1_page.rbs +2 -2
- data/sig/mindee/product/resume/resume_v1_professional_experience.rbs +3 -3
- data/sig/mindee/product/resume/resume_v1_social_networks_url.rbs +3 -3
- data/sig/mindee/product/universal/universal.rbs +5 -5
- data/sig/mindee/product/universal/universal_document.rbs +1 -1
- data/sig/mindee/product/universal/universal_page.rbs +2 -2
- data/sig/mindee/product/universal/universal_prediction.rbs +5 -5
- data/sig/mindee/product/us/bank_check/bank_check_v1.rbs +1 -1
- data/sig/mindee/product/us/bank_check/bank_check_v1_document.rbs +1 -1
- data/sig/mindee/product/us/bank_check/bank_check_v1_page.rbs +2 -2
- data/sig/mindee/product/us/healthcare_card/healthcare_card_v1.rbs +1 -1
- data/sig/mindee/product/us/healthcare_card/healthcare_card_v1_copay.rbs +3 -3
- data/sig/mindee/product/us/healthcare_card/healthcare_card_v1_document.rbs +1 -1
- data/sig/mindee/product/us/healthcare_card/healthcare_card_v1_page.rbs +2 -2
- data/sig/mindee/product/us/us_mail/us_mail_v2.rbs +1 -1
- data/sig/mindee/product/us/us_mail/us_mail_v2_document.rbs +1 -1
- data/sig/mindee/product/us/us_mail/us_mail_v2_page.rbs +2 -2
- data/sig/mindee/product/us/us_mail/us_mail_v2_recipient_address.rbs +3 -3
- data/sig/mindee/product/us/us_mail/us_mail_v2_sender_address.rbs +2 -2
- data/sig/mindee/product/us/us_mail/us_mail_v3.rbs +1 -1
- data/sig/mindee/product/us/us_mail/us_mail_v3_document.rbs +1 -1
- data/sig/mindee/product/us/us_mail/us_mail_v3_page.rbs +2 -2
- data/sig/mindee/product/us/us_mail/us_mail_v3_recipient_address.rbs +3 -3
- data/sig/mindee/product/us/us_mail/us_mail_v3_sender_address.rbs +2 -2
- data/sig/mindee/product/us/w9/w9_v1.rbs +1 -1
- data/sig/mindee/product/us/w9/w9_v1_document.rbs +1 -1
- data/sig/mindee/product/us/w9/w9_v1_page.rbs +2 -2
- data/sig/mindee/version.rbs +2 -2
- metadata +61 -6
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_field'
|
4
|
+
|
5
|
+
module Mindee
|
6
|
+
module Parsing
|
7
|
+
module V2
|
8
|
+
module Field
|
9
|
+
# Collection of inference fields that extends Hash functionality.
|
10
|
+
class InferenceFields < Hash
|
11
|
+
# @return [Integer] Level of indentation for rst display.
|
12
|
+
attr_reader :indent_level
|
13
|
+
|
14
|
+
# @param server_response [Hash] Raw server response hash.
|
15
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
16
|
+
def initialize(server_response, indent_level = 0)
|
17
|
+
super()
|
18
|
+
@indent_level = indent_level
|
19
|
+
|
20
|
+
server_response.each do |key, value|
|
21
|
+
self[key.to_s] = BaseField.create_field(value, 1)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Get a field by key with nil fallback.
|
26
|
+
# @param key [String] Field key to retrieve.
|
27
|
+
# @return [BaseField, nil] The field or nil if not found.
|
28
|
+
def get(key)
|
29
|
+
self[key]
|
30
|
+
end
|
31
|
+
|
32
|
+
# Allow dot notation access to fields.
|
33
|
+
# @param method_name [Symbol] The method name (field key).
|
34
|
+
# @return [BaseField, nil] The field or nil if not found.
|
35
|
+
def method_missing(method_name, *args, &block)
|
36
|
+
key = method_name.to_s
|
37
|
+
if key?(key)
|
38
|
+
self[key]
|
39
|
+
else
|
40
|
+
super
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Check if method_missing should handle the method.
|
45
|
+
# @param method_name [Symbol] The method name.
|
46
|
+
# @return [Boolean] `true` if the method should be handled.
|
47
|
+
def respond_to_missing?(method_name, include_private = false)
|
48
|
+
key?(method_name.to_s) || super
|
49
|
+
end
|
50
|
+
|
51
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
52
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
53
|
+
# Convert the fields to a string representation.
|
54
|
+
# @param indent [Integer, nil] Optional indentation level.
|
55
|
+
# @return [String] String representation of all fields.
|
56
|
+
def to_s(indent = 0)
|
57
|
+
return '' if empty?
|
58
|
+
|
59
|
+
indent ||= @indent_level
|
60
|
+
padding = ' ' * indent
|
61
|
+
lines = []
|
62
|
+
|
63
|
+
each do |field_key, field_value|
|
64
|
+
line = "#{padding}:#{field_key}:"
|
65
|
+
|
66
|
+
case (field_value.class.name || '').split('::').last
|
67
|
+
when 'ListField'
|
68
|
+
# Check if ListField has items and they're not empty
|
69
|
+
list_f = field_value # @type var list_f: ListField
|
70
|
+
if defined?(list_f.items) && list_f.items && !list_f.items.empty?
|
71
|
+
line += list_f.to_s
|
72
|
+
end
|
73
|
+
when 'ObjectField'
|
74
|
+
line += field_value.to_s
|
75
|
+
when 'SimpleField'
|
76
|
+
# Check if SimpleField has a non-empty value
|
77
|
+
simple_f = field_value # @type var simple_f: SimpleField
|
78
|
+
if defined?(simple_f.value) && simple_f.value && !simple_f.value.to_s.empty?
|
79
|
+
line += " #{simple_f}"
|
80
|
+
end
|
81
|
+
else
|
82
|
+
logger.debug("Unknown value was passed to the field creator: #{field_key} : #{field_value}")
|
83
|
+
end
|
84
|
+
|
85
|
+
lines << line
|
86
|
+
end
|
87
|
+
|
88
|
+
lines.join("\n").rstrip
|
89
|
+
end
|
90
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
91
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_field'
|
4
|
+
|
5
|
+
module Mindee
|
6
|
+
module Parsing
|
7
|
+
module V2
|
8
|
+
module Field
|
9
|
+
# Represents a field that contains a list of items.
|
10
|
+
class ListField < BaseField
|
11
|
+
include Enumerable
|
12
|
+
# @return [Array<ListField | ObjectField | SimpleField>] Items contained in the list.
|
13
|
+
attr_reader :items
|
14
|
+
|
15
|
+
# @param server_response [Hash] Raw server response hash.
|
16
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
17
|
+
# @raise [MindeeError] If the 'items' key is missing or not an array.
|
18
|
+
def initialize(server_response, indent_level = 0)
|
19
|
+
super
|
20
|
+
|
21
|
+
unless server_response.key?('items') && server_response['items'].is_a?(Array)
|
22
|
+
raise Errors::MindeeError,
|
23
|
+
"Expected \"items\" to be an array in #{server_response.to_json}."
|
24
|
+
end
|
25
|
+
|
26
|
+
@items = []
|
27
|
+
server_response['items'].each do |item|
|
28
|
+
@items << BaseField.create_field(item, indent_level + 1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# String representation of the list field.
|
33
|
+
# @return [String] Formatted string with bullet points for each item.
|
34
|
+
def to_s
|
35
|
+
return "\n" if @items.empty?
|
36
|
+
|
37
|
+
parts = ['']
|
38
|
+
@items.each do |item|
|
39
|
+
next unless item
|
40
|
+
|
41
|
+
parts << if item.is_a?(ObjectField)
|
42
|
+
item.to_s_from_list
|
43
|
+
else
|
44
|
+
item.to_s
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
parts.join("\n * ")
|
49
|
+
end
|
50
|
+
|
51
|
+
# Check if the list is empty.
|
52
|
+
# @return [Boolean] `true` if the list has no items.
|
53
|
+
def empty?
|
54
|
+
@items.empty?
|
55
|
+
end
|
56
|
+
|
57
|
+
# Get the number of items in the list.
|
58
|
+
# @return [Integer] Number of items.
|
59
|
+
def size
|
60
|
+
@items.size
|
61
|
+
end
|
62
|
+
|
63
|
+
# Get the number of items in the list (alias for size).
|
64
|
+
# @return [Integer] Number of items.
|
65
|
+
def length
|
66
|
+
@items.length
|
67
|
+
end
|
68
|
+
|
69
|
+
# Get an item by index.
|
70
|
+
# @param index [Integer] The index of the item to retrieve.
|
71
|
+
# @return [BaseField, nil] The item at the given index.
|
72
|
+
def [](index)
|
73
|
+
@items[index]
|
74
|
+
end
|
75
|
+
|
76
|
+
# Iterator for Enumerator inheritance.
|
77
|
+
# NOTE: Untyped due to incomplete support in current supported version of RBS.
|
78
|
+
def each(&block)
|
79
|
+
return to_enum(:each) unless block_given?
|
80
|
+
|
81
|
+
@items.each(&block)
|
82
|
+
self
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_field'
|
4
|
+
require_relative 'inference_fields'
|
5
|
+
|
6
|
+
module Mindee
|
7
|
+
module Parsing
|
8
|
+
module V2
|
9
|
+
module Field
|
10
|
+
# A field containing a nested set of inference fields.
|
11
|
+
class ObjectField < BaseField
|
12
|
+
# @return [InferenceFields] Fields contained in the object.
|
13
|
+
attr_reader :fields
|
14
|
+
|
15
|
+
# @param raw_prediction [Hash] Raw server response hash.
|
16
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
17
|
+
def initialize(raw_prediction, indent_level = 0)
|
18
|
+
super
|
19
|
+
|
20
|
+
inner_fields = raw_prediction.fetch('fields', raw_prediction)
|
21
|
+
@fields = InferenceFields.new(inner_fields, @indent_level + 1)
|
22
|
+
end
|
23
|
+
|
24
|
+
# String representation of the object field.
|
25
|
+
# @return [String] String representation with newline prefix.
|
26
|
+
def to_s
|
27
|
+
return "\n" unless @fields && !@fields.empty?
|
28
|
+
|
29
|
+
"\n#{@fields.to_s(1)}"
|
30
|
+
end
|
31
|
+
|
32
|
+
# String representation suitable for list display.
|
33
|
+
# @return [String] String representation without leading spaces.
|
34
|
+
def to_s_from_list
|
35
|
+
return '' if @fields.nil?
|
36
|
+
return '' unless @fields && !@fields.empty?
|
37
|
+
|
38
|
+
field_str = @fields.to_s(2)
|
39
|
+
field_str.length > 4 ? (field_str[4..] || '') : ''
|
40
|
+
end
|
41
|
+
|
42
|
+
# String representation of a single object field
|
43
|
+
# @return [String] Multi-line string with proper indentation.
|
44
|
+
def single_str
|
45
|
+
return '' unless @fields && !@fields.empty?
|
46
|
+
|
47
|
+
out_str = ''
|
48
|
+
indent = ' ' * @indent_level
|
49
|
+
|
50
|
+
@fields.each do |field_key, field_value|
|
51
|
+
value_str = field_value && !field_value.to_s.empty? ? field_value.to_s : ''
|
52
|
+
out_str += "\n#{indent} :#{field_key}: #{value_str}"
|
53
|
+
end
|
54
|
+
|
55
|
+
out_str
|
56
|
+
end
|
57
|
+
|
58
|
+
# String representation for multi-object display
|
59
|
+
# @return [String] Formatted string for list context.
|
60
|
+
def multi_str
|
61
|
+
return '' unless @fields && !@fields.empty?
|
62
|
+
|
63
|
+
out_str = ''
|
64
|
+
indent = ' ' * @indent_level
|
65
|
+
first = true
|
66
|
+
|
67
|
+
@fields.each do |field_key, field_value|
|
68
|
+
value_str = field_value ? field_value.to_s : ''
|
69
|
+
|
70
|
+
if first
|
71
|
+
out_str += "#{indent}:#{field_key}: #{value_str}"
|
72
|
+
first = false
|
73
|
+
else
|
74
|
+
out_str += "\n#{indent} :#{field_key}: #{value_str}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
out_str
|
79
|
+
end
|
80
|
+
|
81
|
+
# Allow dot notation access to nested fields.
|
82
|
+
# @param method_name [Symbol] The method name (field key).
|
83
|
+
# @return [ObjectField, nil] The field or nil if not found.
|
84
|
+
def method_missing(method_name, ...)
|
85
|
+
if @fields.respond_to?(method_name)
|
86
|
+
@fields.send(method_name, ...)
|
87
|
+
else
|
88
|
+
super
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Check if method_missing should handle the method.
|
93
|
+
# @param method_name [Symbol] The method name.
|
94
|
+
# @return [Boolean] `true` if the method should be handled.
|
95
|
+
def respond_to_missing?(method_name, include_private = false)
|
96
|
+
@fields.respond_to?(method_name) || super
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_field'
|
4
|
+
|
5
|
+
module Mindee
|
6
|
+
module Parsing
|
7
|
+
module V2
|
8
|
+
module Field
|
9
|
+
# A simple field with a scalar value.
|
10
|
+
class SimpleField < BaseField
|
11
|
+
# @return [String, Integer, Float, Boolean, nil] Value contained in the field.
|
12
|
+
attr_reader :value
|
13
|
+
|
14
|
+
# @param server_response [Hash] Raw server response hash.
|
15
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
16
|
+
def initialize(server_response, indent_level = 0)
|
17
|
+
super
|
18
|
+
@value = server_response.key?('value') ? server_response['value'] : nil
|
19
|
+
end
|
20
|
+
|
21
|
+
# String representation of the field value.
|
22
|
+
# @return [String] String representation of the value.
|
23
|
+
def to_s
|
24
|
+
return '' if @value.nil?
|
25
|
+
|
26
|
+
if @value.is_a?(TrueClass) || @value.is_a?(FalseClass)
|
27
|
+
@value ? 'True' : 'False'
|
28
|
+
elsif @value.is_a?(Integer) || @value.is_a?(Float)
|
29
|
+
num = @value # @type var num: Integer | Float
|
30
|
+
format_numeric_value(num)
|
31
|
+
else
|
32
|
+
@value.to_s
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Format numeric values to display '.0' in string reps.
|
39
|
+
# @param value [Numeric] The numeric value to format.
|
40
|
+
# @return [String] Formatted numeric string.
|
41
|
+
def format_numeric_value(value)
|
42
|
+
float_value = value.to_f
|
43
|
+
|
44
|
+
if float_value == float_value.to_i
|
45
|
+
format('%.1f', float_value)
|
46
|
+
else
|
47
|
+
formatted = format('%.5f', float_value)
|
48
|
+
formatted.sub(%r{\.?0+$}, '')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'field/base_field'
|
4
|
+
require_relative 'field/field_confidence'
|
5
|
+
require_relative 'field/field_location'
|
6
|
+
require_relative 'field/inference_fields'
|
7
|
+
require_relative 'field/list_field'
|
8
|
+
require_relative 'field/object_field'
|
9
|
+
require_relative 'field/simple_field'
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'inference_model'
|
4
|
+
require_relative 'inference_file'
|
5
|
+
require_relative 'inference_result'
|
6
|
+
|
7
|
+
module Mindee
|
8
|
+
module Parsing
|
9
|
+
module V2
|
10
|
+
# Complete data returned by an inference request.
|
11
|
+
class Inference
|
12
|
+
# @return [InferenceModel] Information about the model used.
|
13
|
+
attr_reader :model
|
14
|
+
# @return [InferenceFile] Information about the processed file.
|
15
|
+
attr_reader :file
|
16
|
+
# @return [InferenceResult] Result contents.
|
17
|
+
attr_reader :result
|
18
|
+
# @return [String] Identifier of the inference (when provided by API).
|
19
|
+
attr_reader :id
|
20
|
+
|
21
|
+
# @param server_response [Hash] Hash representation of the JSON returned by the service.
|
22
|
+
def initialize(server_response)
|
23
|
+
raise ArgumentError, 'server_response must be a Hash' unless server_response.is_a?(Hash)
|
24
|
+
|
25
|
+
@model = InferenceModel.new(server_response['model'])
|
26
|
+
@file = InferenceFile.new(server_response['file'])
|
27
|
+
@result = InferenceResult.new(server_response['result'])
|
28
|
+
|
29
|
+
@id = server_response['id']
|
30
|
+
end
|
31
|
+
|
32
|
+
# String representation.
|
33
|
+
# @return [String]
|
34
|
+
def to_s
|
35
|
+
[
|
36
|
+
'Inference',
|
37
|
+
'#########',
|
38
|
+
'Model',
|
39
|
+
'=====',
|
40
|
+
":ID: #{@model.id}",
|
41
|
+
'',
|
42
|
+
@file.to_s,
|
43
|
+
@result.to_s,
|
44
|
+
'',
|
45
|
+
].join("\n")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
# Information about a file returned in an inference.
|
7
|
+
class InferenceFile
|
8
|
+
# @return [String] File name.
|
9
|
+
attr_reader :name
|
10
|
+
# @return [String, nil] Optional alias for the file.
|
11
|
+
attr_reader :file_alias
|
12
|
+
# @return [Integer] Page count.
|
13
|
+
attr_reader :page_count
|
14
|
+
# @return [String] MIME type.
|
15
|
+
attr_reader :mime_type
|
16
|
+
|
17
|
+
# @param server_response [Hash] Raw JSON parsed into a Hash.
|
18
|
+
def initialize(server_response)
|
19
|
+
@name = server_response['name']
|
20
|
+
@file_alias = server_response['alias']
|
21
|
+
@page_count = server_response['page_count']
|
22
|
+
@mime_type = server_response['mime_type']
|
23
|
+
end
|
24
|
+
|
25
|
+
# String representation.
|
26
|
+
# @return [String]
|
27
|
+
def to_s
|
28
|
+
"File\n" \
|
29
|
+
"====\n" \
|
30
|
+
":Name: #{@name}\n" \
|
31
|
+
":Alias:#{" #{@file_alias}" if @file_alias}\n" \
|
32
|
+
":Page Count: #{@page_count}\n" \
|
33
|
+
":MIME Type: #{@mime_type}\n"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
# ID of the model that produced the inference.
|
7
|
+
class InferenceModel
|
8
|
+
# @return [String] Identifier of the model.
|
9
|
+
attr_reader :id
|
10
|
+
|
11
|
+
# @param server_response [Hash] Raw JSON parsed into a Hash.
|
12
|
+
def initialize(server_response)
|
13
|
+
@id = server_response['id']
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'common_response'
|
4
|
+
require_relative 'inference'
|
5
|
+
|
6
|
+
module Mindee
|
7
|
+
module Parsing
|
8
|
+
module V2
|
9
|
+
# HTTP response wrapper that embeds a V2 Inference.
|
10
|
+
class InferenceResponse < CommonResponse
|
11
|
+
# @return [Inference] Parsed inference payload.
|
12
|
+
attr_reader :inference
|
13
|
+
|
14
|
+
# @param server_response [Hash] Hash parsed from the API JSON response.
|
15
|
+
def initialize(server_response)
|
16
|
+
# CommonResponse takes care of the generic metadata (status, etc.)
|
17
|
+
super
|
18
|
+
|
19
|
+
@inference = Inference.new(server_response['inference'])
|
20
|
+
end
|
21
|
+
|
22
|
+
# String representation.
|
23
|
+
# @return [String]
|
24
|
+
def to_s
|
25
|
+
@inference.to_s
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'field/inference_fields'
|
4
|
+
require_relative 'inference_result_options'
|
5
|
+
|
6
|
+
module Mindee
|
7
|
+
module Parsing
|
8
|
+
module V2
|
9
|
+
# Wrapper for the result of a V2 inference request.
|
10
|
+
class InferenceResult
|
11
|
+
# @return [Mindee::Parsing::V2::Field::InferenceFields] Fields produced by the model.
|
12
|
+
attr_reader :fields
|
13
|
+
# @return [Mindee::Parsing::V2::InferenceResultOptions, nil] Optional extra data.
|
14
|
+
attr_reader :options
|
15
|
+
|
16
|
+
# @param server_response [Hash] Hash version of the JSON returned by the API.
|
17
|
+
def initialize(server_response)
|
18
|
+
raise ArgumentError, 'server_response must be a Hash' unless server_response.is_a?(Hash)
|
19
|
+
|
20
|
+
@fields = Field::InferenceFields.new(server_response['fields'])
|
21
|
+
|
22
|
+
return unless server_response.key?('options') && server_response['options']
|
23
|
+
|
24
|
+
@options = InferenceResultOptions.new(server_response['options'])
|
25
|
+
end
|
26
|
+
|
27
|
+
# String representation.
|
28
|
+
# @return [String]
|
29
|
+
def to_s
|
30
|
+
parts = [
|
31
|
+
'Fields',
|
32
|
+
'======',
|
33
|
+
@fields.to_s,
|
34
|
+
]
|
35
|
+
|
36
|
+
if @options
|
37
|
+
parts += [
|
38
|
+
'Options',
|
39
|
+
'=======',
|
40
|
+
@options.to_s,
|
41
|
+
]
|
42
|
+
end
|
43
|
+
|
44
|
+
parts.join("\n")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'raw_text'
|
4
|
+
|
5
|
+
module Mindee
|
6
|
+
module Parsing
|
7
|
+
module V2
|
8
|
+
# Optional data returned alongside an inference.
|
9
|
+
class InferenceResultOptions
|
10
|
+
# @return [Array<RawText>] Collection of raw texts per page.
|
11
|
+
attr_reader :raw_texts
|
12
|
+
|
13
|
+
# @param server_response [Hash] Raw JSON parsed into a Hash.
|
14
|
+
def initialize(server_response)
|
15
|
+
raw = server_response['raw_texts']
|
16
|
+
@raw_texts = raw.is_a?(Array) ? raw.map { |rt| RawText.new(rt) } : []
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require_relative 'error_response'
|
5
|
+
require_relative 'job_webhook'
|
6
|
+
|
7
|
+
module Mindee
|
8
|
+
module Parsing
|
9
|
+
module V2
|
10
|
+
# Metadata returned when polling a job (asynchronous request).
|
11
|
+
class Job
|
12
|
+
# @return [String] Unique job identifier.
|
13
|
+
attr_reader :id
|
14
|
+
# @return [DateTime, nil] Timestamp of creation.
|
15
|
+
attr_reader :created_at
|
16
|
+
# @return [String] Identifier of the model used.
|
17
|
+
attr_reader :model_id
|
18
|
+
# @return [String] Name of the processed file.
|
19
|
+
attr_reader :filename
|
20
|
+
# @return [String] Optional alias for the file.
|
21
|
+
attr_reader :alias
|
22
|
+
# @return [String, nil] Current status (submitted, processing, done, …).
|
23
|
+
attr_reader :status
|
24
|
+
# @return [String] URL to query for updated status.
|
25
|
+
attr_reader :polling_url
|
26
|
+
# @return [String, nil] URL that redirects to the final result once ready.
|
27
|
+
attr_reader :result_url
|
28
|
+
# @return [Array<JobWebhook>] Webhooks triggered by the job.
|
29
|
+
attr_reader :webhooks
|
30
|
+
# @return [ErrorResponse, nil] Error details when the job failed.
|
31
|
+
attr_reader :error
|
32
|
+
|
33
|
+
# @param server_response [Hash] Parsed JSON payload from the API.
|
34
|
+
def initialize(server_response)
|
35
|
+
raise ArgumentError, 'server_response must be a Hash' unless server_response.is_a?(Hash)
|
36
|
+
|
37
|
+
@id = server_response['id']
|
38
|
+
@status = server_response['status'] if server_response.key?('status')
|
39
|
+
unless server_response['error'].nil? || server_response['error'].empty?
|
40
|
+
@error = ErrorResponse.new(server_response['error'])
|
41
|
+
end
|
42
|
+
@created_at = Time.iso8601(server_response['created_at'])
|
43
|
+
@model_id = server_response['model_id']
|
44
|
+
@polling_url = server_response['polling_url']
|
45
|
+
@filename = server_response['filename']
|
46
|
+
@result_url = server_response['result_url']
|
47
|
+
@alias = server_response['alias']
|
48
|
+
@webhooks = []
|
49
|
+
server_response['webhooks'].each do |webhook|
|
50
|
+
@webhooks.push JobWebhook.new(webhook)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# String representation.
|
55
|
+
# @return [String]
|
56
|
+
def to_s
|
57
|
+
lines = [
|
58
|
+
'Job',
|
59
|
+
'###',
|
60
|
+
":ID: #{@id}",
|
61
|
+
":CreatedAt: #{@created_at}",
|
62
|
+
":ModelID: #{@model_id}",
|
63
|
+
":Filename: #{@filename}",
|
64
|
+
":Alias: #{@alias}",
|
65
|
+
":Status: #{@status}",
|
66
|
+
":PollingURL: #{@polling_url}",
|
67
|
+
":ResultURL: #{@result_url}",
|
68
|
+
]
|
69
|
+
|
70
|
+
lines << @error.to_s if @error
|
71
|
+
|
72
|
+
unless @webhooks.empty?
|
73
|
+
lines += [
|
74
|
+
'',
|
75
|
+
'Webhooks',
|
76
|
+
'=========',
|
77
|
+
@webhooks.map(&:to_s).join("\n\n"),
|
78
|
+
]
|
79
|
+
end
|
80
|
+
|
81
|
+
lines.join("\n")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'common_response'
|
4
|
+
require_relative 'job'
|
5
|
+
|
6
|
+
module Mindee
|
7
|
+
module Parsing
|
8
|
+
module V2
|
9
|
+
# HTTP response wrapper that embeds a V2 job.
|
10
|
+
class JobResponse < CommonResponse
|
11
|
+
# @return [Job] Parsed job payload.
|
12
|
+
attr_reader :job
|
13
|
+
|
14
|
+
# @param server_response [Hash] Hash parsed from the API JSON response.
|
15
|
+
def initialize(server_response)
|
16
|
+
# CommonResponse takes care of the generic metadata (status, etc.)
|
17
|
+
super
|
18
|
+
|
19
|
+
@job = Job.new(server_response['job'])
|
20
|
+
end
|
21
|
+
|
22
|
+
# String representation.
|
23
|
+
# @return [String]
|
24
|
+
def to_s
|
25
|
+
@job.to_s
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|