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
@@ -27,7 +27,7 @@ module Mindee
|
|
27
27
|
attr_reader :filename
|
28
28
|
# @return [String]
|
29
29
|
attr_reader :file_mimetype
|
30
|
-
# @return [StringIO]
|
30
|
+
# @return [StringIO | File]
|
31
31
|
attr_reader :io_stream
|
32
32
|
|
33
33
|
# @param io_stream [StringIO, File]
|
@@ -47,8 +47,7 @@ module Mindee
|
|
47
47
|
end
|
48
48
|
|
49
49
|
if filename.end_with?('.pdf') && repair_pdf
|
50
|
-
|
51
|
-
@file_mimetype = Marcel::MimeType.for @io_stream
|
50
|
+
fix_pdf!
|
52
51
|
|
53
52
|
logger.debug("Loaded new input #{@filename} from #{self.class}")
|
54
53
|
return if ALLOWED_MIME_TYPES.include? @file_mimetype
|
@@ -57,28 +56,41 @@ module Mindee
|
|
57
56
|
raise Errors::MindeeMimeTypeError, @file_mimetype.to_s
|
58
57
|
end
|
59
58
|
|
60
|
-
#
|
61
|
-
|
62
|
-
|
63
|
-
# @param stream [StringIO]
|
64
|
-
def rescue_broken_pdf(stream)
|
65
|
-
stream.gets('%PDF-')
|
66
|
-
raise Errors::MindeePDFError if stream.eof? || stream.pos > 500
|
67
|
-
|
68
|
-
stream.pos = stream.pos - 5
|
69
|
-
data = stream.read
|
70
|
-
@io_stream.close
|
71
|
-
|
72
|
-
@io_stream = StringIO.new
|
73
|
-
@io_stream << data
|
59
|
+
# @deprecated See {#fix_pdf!} or {#self.fix_pdf} instead.
|
60
|
+
def rescue_broken_pdf(_)
|
61
|
+
fix_pdf!
|
74
62
|
end
|
75
63
|
|
76
|
-
# Shorthand for
|
64
|
+
# Shorthand for PDF mimetype validation.
|
77
65
|
def pdf?
|
78
66
|
@file_mimetype.to_s == 'application/pdf'
|
79
67
|
end
|
80
68
|
|
81
|
-
#
|
69
|
+
# Attempts to fix the PDF data in the file.
|
70
|
+
# @param maximum_offset [Integer] Maximum offset to look for the PDF header.
|
71
|
+
# @return [void]
|
72
|
+
# @raise [Mindee::Errors::MindeePDFError]
|
73
|
+
def fix_pdf!(maximum_offset: 500)
|
74
|
+
@io_stream = LocalInputSource.fix_pdf(@io_stream, maximum_offset: maximum_offset)
|
75
|
+
@io_stream.rewind
|
76
|
+
@file_mimetype = Marcel::MimeType.for @io_stream
|
77
|
+
end
|
78
|
+
|
79
|
+
# Attempt to fix the PDF data in the given stream.
|
80
|
+
# @param stream [StringIO] The stream to fix.
|
81
|
+
# @param maximum_offset [Integer] Maximum offset to look for the PDF header.
|
82
|
+
# @return [StringIO] The fixed stream.
|
83
|
+
# @raise [Mindee::Errors::MindeePDFError]
|
84
|
+
def self.fix_pdf(stream, maximum_offset: 500)
|
85
|
+
out_stream = StringIO.new
|
86
|
+
stream.gets('%PDF-')
|
87
|
+
raise Errors::MindeePDFError if stream.eof? || stream.pos > maximum_offset
|
88
|
+
|
89
|
+
stream.pos = stream.pos - 5
|
90
|
+
out_stream << stream.read
|
91
|
+
end
|
92
|
+
|
93
|
+
# Cuts a PDF file according to provided options.
|
82
94
|
# @param options [PageOptions, nil] Page cutting/merge options:
|
83
95
|
#
|
84
96
|
# * `:page_indexes` Zero-based list of page indexes.
|
@@ -86,14 +98,20 @@ module Mindee
|
|
86
98
|
# * `:KEEP_ONLY` - keep only the specified pages, and remove all others.
|
87
99
|
# * `:REMOVE` - remove the specified pages, and keep all others.
|
88
100
|
# * `:on_min_pages` Apply the operation only if document has at least this many pages.
|
89
|
-
def
|
101
|
+
def apply_page_options(options)
|
90
102
|
@io_stream.seek(0)
|
91
103
|
@io_stream = PDF::PDFProcessor.parse(@io_stream, options)
|
92
104
|
end
|
93
105
|
|
106
|
+
# @deprecated Use {#apply_page_options} instead.
|
107
|
+
# @see #apply_page_options
|
108
|
+
def process_pdf(options)
|
109
|
+
apply_page_options(options)
|
110
|
+
end
|
111
|
+
|
94
112
|
# Reads a document.
|
95
113
|
# @param close [bool]
|
96
|
-
# @return [Array
|
114
|
+
# @return [Array<>]
|
97
115
|
def read_contents(close: true)
|
98
116
|
logger.debug("Reading data from: #{@filename}")
|
99
117
|
@io_stream.seek(0)
|
@@ -101,20 +119,21 @@ module Mindee
|
|
101
119
|
data = @io_stream.read
|
102
120
|
@io_stream.rewind
|
103
121
|
@io_stream.close if close
|
104
|
-
[
|
122
|
+
[data, { filename: Mindee::Input::Source.convert_to_unicode_escape(@filename) }]
|
105
123
|
end
|
106
124
|
|
107
125
|
# Write the file to a given path. Uses the initial file name by default.
|
108
126
|
# @param path [String] Path to write the file to.
|
109
127
|
def write_to_file(path)
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
128
|
+
t_path = if File.directory?(path || '') || path.to_s.end_with?('/')
|
129
|
+
File.join(path || '', @filename)
|
130
|
+
else
|
131
|
+
path
|
132
|
+
end
|
133
|
+
full_path = File.expand_path(t_path || '')
|
115
134
|
FileUtils.mkdir_p(File.dirname(full_path))
|
116
135
|
@io_stream.rewind
|
117
|
-
File.binwrite(full_path, @io_stream.read)
|
136
|
+
File.binwrite(full_path, @io_stream.read || '')
|
118
137
|
logger.debug("Wrote file successfully to #{full_path}")
|
119
138
|
@io_stream.rewind
|
120
139
|
end
|
@@ -159,8 +178,8 @@ module Mindee
|
|
159
178
|
@io_stream.rewind
|
160
179
|
end
|
161
180
|
|
162
|
-
# Checks whether the file has source text if it is a pdf.
|
163
|
-
# @return [bool]
|
181
|
+
# Checks whether the file has source text if it is a pdf. `false` otherwise
|
182
|
+
# @return [bool] `true` if the file is a PDF and has source text.
|
164
183
|
def source_text?
|
165
184
|
Mindee::PDF::PDFTools.source_text?(@io_stream)
|
166
185
|
end
|
data/lib/mindee/input.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
# Class for page options in parse calls.
|
5
|
+
# @!attribute page_indexes [Array[Integer]] Zero-based list of page indexes.
|
6
|
+
# @!attribute operation [:KEEP_ONLY, :REMOVE] Operation to apply on the document, given the specified page indexes:
|
7
|
+
# * `:KEEP_ONLY` - keep only the specified pages, and remove all others.
|
8
|
+
# * `:REMOVE` - remove the specified pages, and keep all others.
|
9
|
+
# @!attribute on_min_pages [Integer, nil] Apply the operation only if the document has at least this many pages.
|
10
|
+
class PageOptions
|
11
|
+
attr_accessor :page_indexes, :operation, :on_min_pages
|
12
|
+
|
13
|
+
def initialize(params: {})
|
14
|
+
params ||= {}
|
15
|
+
params = params.transform_keys(&:to_sym)
|
16
|
+
@page_indexes = params.fetch(
|
17
|
+
:page_indexes,
|
18
|
+
[] # : Array[Integer]
|
19
|
+
)
|
20
|
+
@operation = params.fetch(:operation, :KEEP_ONLY)
|
21
|
+
@on_min_pages = params.fetch(:on_min_pages, nil)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -8,7 +8,7 @@ module Mindee
|
|
8
8
|
# @return [Hash]
|
9
9
|
attr_reader :error
|
10
10
|
# @return [Array<String>]
|
11
|
-
attr_reader :
|
11
|
+
attr_reader :resources
|
12
12
|
# @return [RequestStatus, Symbol]
|
13
13
|
attr_reader :status
|
14
14
|
# @return [Integer]
|
@@ -18,7 +18,7 @@ module Mindee
|
|
18
18
|
|
19
19
|
def initialize(server_response)
|
20
20
|
@error = server_response['error']
|
21
|
-
@
|
21
|
+
@resources = server_response['resources']
|
22
22
|
|
23
23
|
@status = if server_response['status'] == 'failure'
|
24
24
|
RequestStatus::FAILURE
|
@@ -8,9 +8,13 @@ module Mindee
|
|
8
8
|
module Common
|
9
9
|
# Potential values for queue in asynchronous calls.
|
10
10
|
module JobStatus
|
11
|
+
# Job is waiting.
|
11
12
|
WAITING = :waiting
|
13
|
+
# Job is processing.
|
12
14
|
PROCESSING = :processing
|
15
|
+
# Job is done.
|
13
16
|
COMPLETED = :completed
|
17
|
+
# Job failed.
|
14
18
|
FAILURE = :failed
|
15
19
|
end
|
16
20
|
|
@@ -21,7 +21,7 @@ module Mindee
|
|
21
21
|
# @return [Mindee::Inference]
|
22
22
|
attr_reader :inference
|
23
23
|
# Priority of the execution.
|
24
|
-
# @return [ExecutionPriority]
|
24
|
+
# @return [ExecutionPriority, Symbol, nil]
|
25
25
|
attr_reader :priority
|
26
26
|
# The time at which the file was tagged as reviewed.
|
27
27
|
# @return [Time, nil]
|
@@ -11,7 +11,7 @@ module Mindee
|
|
11
11
|
class Extras
|
12
12
|
# @return [CropperExtra, nil]
|
13
13
|
attr_reader :cropper
|
14
|
-
# @return [Mindee::Parsing::Common::Extras::FullTextOCRExtra
|
14
|
+
# @return [Mindee::Parsing::Common::Extras::FullTextOCRExtra]
|
15
15
|
attr_reader :full_text_ocr
|
16
16
|
# @return [RAGExtra, nil]
|
17
17
|
attr_reader :rag
|
@@ -26,7 +26,7 @@ module Mindee
|
|
26
26
|
@rag = Mindee::Parsing::Common::Extras::RAGExtra.new(raw_prediction['rag']) if raw_prediction['rag']
|
27
27
|
|
28
28
|
raw_prediction.each do |key, value|
|
29
|
-
instance_variable_set("@#{key}", value) unless ['cropper', 'full_text_ocr', 'rag'].include?(key)
|
29
|
+
instance_variable_set("@#{key}", value) unless ['cropper', 'full_text_ocr', 'rag'].include?(key.to_s)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -11,7 +11,7 @@ module Mindee
|
|
11
11
|
class OCRWord
|
12
12
|
# The confidence score, value will be between 0.0 and 1.0
|
13
13
|
# @return [Float]
|
14
|
-
|
14
|
+
attr_reader :confidence
|
15
15
|
# @return [String]
|
16
16
|
attr_reader :text
|
17
17
|
# @return [Mindee::Geometry::Quadrilateral]
|
@@ -36,7 +36,7 @@ module Mindee
|
|
36
36
|
# A list of words which are on the same line.
|
37
37
|
class OCRLine < Array
|
38
38
|
# @param prediction [Hash, nil]
|
39
|
-
# @param from_array [Array
|
39
|
+
# @param from_array [Array<OCRWord>, nil]
|
40
40
|
def initialize(prediction = nil, from_array = nil)
|
41
41
|
if !prediction.nil?
|
42
42
|
super(prediction.map { |word_prediction| OCRWord.new(word_prediction) })
|
@@ -48,9 +48,7 @@ module Mindee
|
|
48
48
|
# Sort the words on the line from left to right.
|
49
49
|
# @return [OCRLine]
|
50
50
|
def sort_on_x
|
51
|
-
from_array =
|
52
|
-
Geometry.get_min_max_x(word1.polygon).min <=> Geometry.get_min_max_x(word2.polygon).min
|
53
|
-
end
|
51
|
+
from_array = sort_by { |word| Geometry.get_min_max_x(word.polygon).min }
|
54
52
|
OCRLine.new(nil, from_array)
|
55
53
|
end
|
56
54
|
|
@@ -104,7 +102,7 @@ module Mindee
|
|
104
102
|
# @param indexes [Array<Integer>]
|
105
103
|
# @param lines [Array<OCRLine>]
|
106
104
|
def parse_one(sorted_words, current, indexes, lines)
|
107
|
-
line = OCRLine.new([])
|
105
|
+
line = OCRLine.new(nil, [])
|
108
106
|
sorted_words.each_with_index do |word, idx|
|
109
107
|
next if indexes.include?(idx)
|
110
108
|
|
@@ -5,7 +5,7 @@ module Mindee
|
|
5
5
|
module Common
|
6
6
|
# Page orientation
|
7
7
|
class Orientation
|
8
|
-
# @return [Integer]
|
8
|
+
# @return [Integer, nil]
|
9
9
|
attr_reader :page_id
|
10
10
|
# A prediction among these 3 possible outputs:
|
11
11
|
# * 0 degrees: the page is already upright
|
@@ -15,7 +15,7 @@ module Mindee
|
|
15
15
|
attr_reader :value
|
16
16
|
|
17
17
|
# @param prediction [Hash]
|
18
|
-
# @param page_id [Integer]
|
18
|
+
# @param page_id [Integer, nil]
|
19
19
|
def initialize(prediction, page_id)
|
20
20
|
@value = prediction['value']
|
21
21
|
@page_id = page_id
|
@@ -5,7 +5,12 @@ module Mindee
|
|
5
5
|
module Common
|
6
6
|
# Product information
|
7
7
|
class Product
|
8
|
-
|
8
|
+
# @return [String] Name of the product.
|
9
|
+
attr_reader :name
|
10
|
+
# @return [String?] Type of product.
|
11
|
+
attr_reader :type
|
12
|
+
# @return [String] Product version.
|
13
|
+
attr_reader :version
|
9
14
|
|
10
15
|
# @param prediction [Hash]
|
11
16
|
def initialize(prediction)
|
@@ -13,12 +13,12 @@ module Mindee
|
|
13
13
|
|
14
14
|
def initialize(prediction, page_id, reconstructed: false)
|
15
15
|
super
|
16
|
-
@value = @value.round(3) unless @value.
|
16
|
+
@value = @value.to_f.round(3).to_f unless @value.to_s.empty?
|
17
17
|
end
|
18
18
|
|
19
19
|
# @return [String]
|
20
20
|
def to_s
|
21
|
-
BaseField.float_to_string(@value)
|
21
|
+
@value.nil? ? '' : BaseField.float_to_string(@value.to_f)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -16,7 +16,7 @@ module Mindee
|
|
16
16
|
return in_str.to_s if max_col_size.nil?
|
17
17
|
|
18
18
|
in_str = in_str.to_s.gsub(%r{[\n\r\t]}, "\n" => '\\n', "\r" => '\\r', "\t" => '\\t')
|
19
|
-
in_str.to_s.length <= max_col_size.to_i ? in_str.to_s : "#{in_str[0..max_col_size.to_i - 4]}..."
|
19
|
+
in_str.to_s.length <= max_col_size.to_i ? in_str.to_s : "#{in_str[0..(max_col_size.to_i - 4)]}..."
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -52,7 +52,7 @@ module Mindee
|
|
52
52
|
out_h[:code] = @code.nil? ? '' : @code
|
53
53
|
out_h[:base] = @base.nil? ? '' : print_float(@base)
|
54
54
|
out_h[:rate] = @rate.nil? ? '' : print_float(@rate).to_s
|
55
|
-
out_h[:value] = @value.
|
55
|
+
out_h[:value] = @value.to_s.empty? ? '' : print_float(@value.to_f).to_s
|
56
56
|
out_h
|
57
57
|
end
|
58
58
|
|
@@ -12,11 +12,11 @@ module Mindee
|
|
12
12
|
|
13
13
|
# ID of the page (as given by the API).
|
14
14
|
# @return [Integer]
|
15
|
-
|
15
|
+
attr_reader :page_id
|
16
16
|
|
17
17
|
# List of word values
|
18
18
|
# @return [Array<UniversalObjectField, StringField>]
|
19
|
-
|
19
|
+
attr_reader :values
|
20
20
|
|
21
21
|
# ID of the page the object was found on.
|
22
22
|
# List of word values.
|
@@ -15,15 +15,18 @@ module Mindee
|
|
15
15
|
# @return [Float]
|
16
16
|
attr_reader :confidence
|
17
17
|
# Value as String
|
18
|
-
# @return [
|
19
|
-
|
18
|
+
# @return [String]
|
19
|
+
attr_reader :raw_value
|
20
|
+
# All values
|
21
|
+
# @return [Hash]
|
22
|
+
attr_reader :all_values
|
20
23
|
|
21
24
|
# ID of the page the object was found on.
|
22
25
|
# Confidence with which the value was assessed.
|
23
26
|
# Raw unprocessed value, as it was sent by the server.
|
24
27
|
|
25
28
|
def initialize(raw_prediction, page_id = nil)
|
26
|
-
@all_values = {} # : Hash[
|
29
|
+
@all_values = {} # : Hash[String | Symbol, untyped]
|
27
30
|
item_page_id = nil
|
28
31
|
raw_prediction.each do |name, value|
|
29
32
|
case name
|
@@ -75,7 +78,7 @@ module Mindee
|
|
75
78
|
#
|
76
79
|
# @param method_name [Symbol] The name of the method being checked.
|
77
80
|
# @param include_private [bool] Whether to include private methods in the check.
|
78
|
-
# @return [bool]
|
81
|
+
# @return [bool] `true` if the method can be responded to, false otherwise.
|
79
82
|
def respond_to_missing?(method_name, include_private = false)
|
80
83
|
@all_values.key?(method_name.to_s) || super
|
81
84
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
# Base class for inference and job responses on the V2 API.
|
7
|
+
class CommonResponse
|
8
|
+
# @return [Hash]
|
9
|
+
attr_reader :raw_http
|
10
|
+
|
11
|
+
# @param http_response [Hash]
|
12
|
+
def initialize(http_response)
|
13
|
+
@raw_http = http_response
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
# Encapsulates information returned by the API when an error occurs.
|
7
|
+
class ErrorResponse
|
8
|
+
# @return [Integer] HTTP status code.
|
9
|
+
attr_reader :status
|
10
|
+
# @return [String] Error detail.
|
11
|
+
attr_reader :detail
|
12
|
+
|
13
|
+
# @param server_response [Hash] Raw JSON parsed into a Hash.
|
14
|
+
def initialize(server_response)
|
15
|
+
@status = server_response['status']
|
16
|
+
@detail = server_response['detail']
|
17
|
+
end
|
18
|
+
|
19
|
+
# String representation.
|
20
|
+
# @return [String]
|
21
|
+
def to_s
|
22
|
+
"Error\n=====\n:Status: #{@status}\n:Detail: #{@detail}"
|
23
|
+
end
|
24
|
+
|
25
|
+
# Hash representation
|
26
|
+
# @return [Hash] Hash representation of the object.
|
27
|
+
def as_hash
|
28
|
+
{
|
29
|
+
status: @status,
|
30
|
+
detail: @detail,
|
31
|
+
}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
# Field submodule for V2.
|
7
|
+
module Field
|
8
|
+
# Base class for V2 fields.
|
9
|
+
class BaseField
|
10
|
+
# @return [Integer] Level of indentation for rst display.
|
11
|
+
attr_reader :indent_level
|
12
|
+
|
13
|
+
# @return [FieldConfidence, nil] Confidence score for the field.
|
14
|
+
attr_reader :confidence
|
15
|
+
|
16
|
+
# @return [Array<FieldLocation>] List of locations the field was found at.
|
17
|
+
attr_reader :locations
|
18
|
+
|
19
|
+
# @param raw_prediction [Hash] Raw prediction hash.
|
20
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
21
|
+
def initialize(raw_prediction, indent_level = 0)
|
22
|
+
@indent_level = indent_level
|
23
|
+
@confidence = raw_prediction.key?('confidence') ? raw_prediction['confidence'] : nil
|
24
|
+
@locations = if raw_prediction.key?('locations')
|
25
|
+
raw_prediction['locations'].map do |location|
|
26
|
+
FieldLocation.new(location)
|
27
|
+
end
|
28
|
+
else
|
29
|
+
[]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Factory method to create appropriate field types.
|
34
|
+
# @param raw_prediction [Hash] Raw prediction hash.
|
35
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
36
|
+
# @return [BaseField] Appropriate field instance.
|
37
|
+
# @raise [MindeeError] If the field type isn't recognized.
|
38
|
+
def self.create_field(raw_prediction, indent_level = 0)
|
39
|
+
if raw_prediction.key?('items')
|
40
|
+
require_relative 'list_field'
|
41
|
+
return ListField.new(raw_prediction, indent_level)
|
42
|
+
end
|
43
|
+
|
44
|
+
if raw_prediction.key?('fields')
|
45
|
+
require_relative 'object_field'
|
46
|
+
return ObjectField.new(raw_prediction, indent_level)
|
47
|
+
end
|
48
|
+
|
49
|
+
if raw_prediction.key?('value')
|
50
|
+
require_relative 'simple_field'
|
51
|
+
return SimpleField.new(raw_prediction, indent_level)
|
52
|
+
end
|
53
|
+
|
54
|
+
raise Errors::MindeeError, "Unrecognized field format in #{raw_prediction.to_json}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
module Field
|
7
|
+
# Confidence level of a field as returned by the V2 API.
|
8
|
+
class FieldConfidence
|
9
|
+
# @return [String] The confidence level value.
|
10
|
+
attr_reader :value
|
11
|
+
|
12
|
+
# Absolute certainty about the field's extraction.
|
13
|
+
CERTAIN = 'Certain'
|
14
|
+
# High certainty about the field's extraction.
|
15
|
+
HIGH = 'High'
|
16
|
+
# Medium certainty about the field's extraction.
|
17
|
+
MEDIUM = 'Medium'
|
18
|
+
# Low certainty about the field's extraction.
|
19
|
+
LOW = 'Low'
|
20
|
+
|
21
|
+
# List of valid values, as frozen strings.
|
22
|
+
VALID_VALUES = [CERTAIN, HIGH, MEDIUM, LOW].freeze
|
23
|
+
|
24
|
+
# @param value [String] The confidence level value.
|
25
|
+
# @raise [ArgumentError] If the value is not a valid confidence level.
|
26
|
+
def initialize(value)
|
27
|
+
unless VALID_VALUES.include?(value)
|
28
|
+
raise ArgumentError,
|
29
|
+
"Invalid confidence level: #{value}. Must be one of: #{VALID_VALUES.join(', ')}"
|
30
|
+
end
|
31
|
+
|
32
|
+
@value = value
|
33
|
+
end
|
34
|
+
|
35
|
+
# Create a FieldConfidence from a string value.
|
36
|
+
# @param value [String] The confidence level string.
|
37
|
+
# @return [FieldConfidence] The confidence instance.
|
38
|
+
def self.from_string(value)
|
39
|
+
new(value)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Check if this is a certain confidence level.
|
43
|
+
# @return [Boolean] `true` if confidence is certain.
|
44
|
+
def certain?
|
45
|
+
@value == CERTAIN
|
46
|
+
end
|
47
|
+
|
48
|
+
# Check if this is a high confidence level.
|
49
|
+
# @return [Boolean] `true` if confidence is high.
|
50
|
+
def high?
|
51
|
+
@value == HIGH
|
52
|
+
end
|
53
|
+
|
54
|
+
# Check if this is a medium confidence level.
|
55
|
+
# @return [Boolean] `true` if confidence is medium.
|
56
|
+
def medium?
|
57
|
+
@value == MEDIUM
|
58
|
+
end
|
59
|
+
|
60
|
+
# Check if this is a low confidence level.
|
61
|
+
# @return [Boolean] `true` if confidence is low.
|
62
|
+
def low?
|
63
|
+
@value == LOW
|
64
|
+
end
|
65
|
+
|
66
|
+
# String representation of the confidence level.
|
67
|
+
# @return [String] The confidence level value.
|
68
|
+
def to_s
|
69
|
+
@value
|
70
|
+
end
|
71
|
+
|
72
|
+
# Compare two FieldConfidence instances.
|
73
|
+
# @param other [FieldConfidence] The other confidence to compare.
|
74
|
+
# @return [Boolean] `true` if they have the same value.
|
75
|
+
def ==(other)
|
76
|
+
other.is_a?(FieldConfidence) && @value == other.value
|
77
|
+
end
|
78
|
+
|
79
|
+
# Make instances comparable and hashable
|
80
|
+
alias eql? ==
|
81
|
+
|
82
|
+
# Inspect method for debugging.
|
83
|
+
# @return [String] Debug representation.
|
84
|
+
def inspect
|
85
|
+
"#<#{self.class.name}:#{@value}>"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../geometry/polygon'
|
4
|
+
|
5
|
+
module Mindee
|
6
|
+
module Parsing
|
7
|
+
module V2
|
8
|
+
module Field
|
9
|
+
# Location of a field.
|
10
|
+
class FieldLocation
|
11
|
+
# @return [Mindee::Geometry::Polygon, nil] Polygon corresponding to the field location.
|
12
|
+
attr_reader :polygon
|
13
|
+
|
14
|
+
# @return [Integer, nil] Page on which the field is located.
|
15
|
+
attr_reader :page
|
16
|
+
|
17
|
+
# @param server_response [Hash] Raw server response hash.
|
18
|
+
def initialize(server_response)
|
19
|
+
polygon_data = server_response['polygon'] || server_response[:polygon]
|
20
|
+
@polygon = polygon_data ? Mindee::Geometry::Polygon.new(polygon_data) : nil
|
21
|
+
|
22
|
+
page_id = server_response['page'] || server_response[:page]
|
23
|
+
@page = page_id.is_a?(Float) || page_id.is_a?(Integer) ? page_id.to_i : nil
|
24
|
+
end
|
25
|
+
|
26
|
+
# String representation of the polygon (empty string when none).
|
27
|
+
#
|
28
|
+
# @return [String]
|
29
|
+
def to_s
|
30
|
+
@polygon ? @polygon.to_s : ''
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|