mindee 4.6.0 → 4.7.0.pre.rc1
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 +12 -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.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 +10 -10
- 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 +19 -12
- 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 +6 -3
- 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 +56 -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 +4 -2
- 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 +10 -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 +22 -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
@@ -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
|
@@ -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
|
@@ -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 steep.
|
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
|