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.
Files changed (309) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +21 -222
  4. data/docs/code_samples/default_v2.txt +28 -0
  5. data/lib/mindee/client.rb +11 -30
  6. data/lib/mindee/client_v2.rb +109 -0
  7. data/lib/mindee/errors/mindee_http_error_v2.rb +26 -0
  8. data/lib/mindee/errors.rb +1 -0
  9. data/lib/mindee/geometry/point.rb +2 -2
  10. data/lib/mindee/geometry/quadrilateral.rb +4 -4
  11. data/lib/mindee/geometry/utils.rb +1 -0
  12. data/lib/mindee/http/api_settings_v2.rb +61 -0
  13. data/lib/mindee/http/endpoint.rb +12 -6
  14. data/lib/mindee/http/http_error_handler.rb +17 -4
  15. data/lib/mindee/http/mindee_api_v2.rb +148 -0
  16. data/lib/mindee/http/response_validation.rb +20 -1
  17. data/lib/mindee/http/workflow_endpoint.rb +2 -2
  18. data/lib/mindee/http.rb +2 -0
  19. data/lib/mindee/image/extracted_image.rb +1 -1
  20. data/lib/mindee/image/image_extractor.rb +10 -10
  21. data/lib/mindee/input/inference_parameters.rb +116 -0
  22. data/lib/mindee/input/local_response.rb +10 -1
  23. data/lib/mindee/input/polling_options.rb +26 -0
  24. data/lib/mindee/input/sources/base64_input_source.rb +2 -2
  25. data/lib/mindee/input/sources/local_input_source.rb +19 -12
  26. data/lib/mindee/input.rb +2 -0
  27. data/lib/mindee/page_options.rb +24 -0
  28. data/lib/mindee/parsing/common/api_request.rb +2 -2
  29. data/lib/mindee/parsing/common/api_response.rb +4 -0
  30. data/lib/mindee/parsing/common/execution.rb +1 -1
  31. data/lib/mindee/parsing/common/extras/extras.rb +2 -2
  32. data/lib/mindee/parsing/common/extras/rag_extra.rb +2 -0
  33. data/lib/mindee/parsing/common/ocr/ocr.rb +4 -6
  34. data/lib/mindee/parsing/common/orientation.rb +2 -2
  35. data/lib/mindee/parsing/common/product.rb +6 -1
  36. data/lib/mindee/parsing/standard/amount_field.rb +2 -2
  37. data/lib/mindee/parsing/standard/feature_field.rb +1 -1
  38. data/lib/mindee/parsing/standard/tax_field.rb +1 -1
  39. data/lib/mindee/parsing/universal/universal_list_field.rb +2 -2
  40. data/lib/mindee/parsing/universal/universal_object_field.rb +6 -3
  41. data/lib/mindee/parsing/v2/common_response.rb +18 -0
  42. data/lib/mindee/parsing/v2/error_response.rb +36 -0
  43. data/lib/mindee/parsing/v2/field/base_field.rb +60 -0
  44. data/lib/mindee/parsing/v2/field/field_confidence.rb +91 -0
  45. data/lib/mindee/parsing/v2/field/field_location.rb +36 -0
  46. data/lib/mindee/parsing/v2/field/inference_fields.rb +96 -0
  47. data/lib/mindee/parsing/v2/field/list_field.rb +88 -0
  48. data/lib/mindee/parsing/v2/field/object_field.rb +102 -0
  49. data/lib/mindee/parsing/v2/field/simple_field.rb +56 -0
  50. data/lib/mindee/parsing/v2/field.rb +9 -0
  51. data/lib/mindee/parsing/v2/inference.rb +50 -0
  52. data/lib/mindee/parsing/v2/inference_file.rb +38 -0
  53. data/lib/mindee/parsing/v2/inference_model.rb +18 -0
  54. data/lib/mindee/parsing/v2/inference_response.rb +30 -0
  55. data/lib/mindee/parsing/v2/inference_result.rb +49 -0
  56. data/lib/mindee/parsing/v2/inference_result_options.rb +21 -0
  57. data/lib/mindee/parsing/v2/job.rb +86 -0
  58. data/lib/mindee/parsing/v2/job_response.rb +30 -0
  59. data/lib/mindee/parsing/v2/job_webhook.rb +60 -0
  60. data/lib/mindee/parsing/v2/raw_text.rb +21 -0
  61. data/lib/mindee/parsing/v2.rb +15 -0
  62. data/lib/mindee/pdf/extracted_pdf.rb +5 -3
  63. data/lib/mindee/pdf/pdf_extractor.rb +11 -7
  64. data/lib/mindee/pdf/pdf_processor.rb +6 -6
  65. data/lib/mindee/pdf/pdf_tools.rb +4 -2
  66. data/lib/mindee/product/universal/universal_prediction.rb +4 -4
  67. data/lib/mindee/version.rb +2 -2
  68. data/lib/mindee.rb +6 -0
  69. data/mindee.gemspec +1 -1
  70. data/sig/custom/mini_magick.rbs +14 -7
  71. data/sig/custom/net_http.rbs +4 -4
  72. data/sig/custom/origami.rbs +9 -4
  73. data/sig/mindee/client.rbs +14 -19
  74. data/sig/mindee/client_v2.rbs +17 -0
  75. data/sig/mindee/errors/mindee_http_error.rbs +6 -5
  76. data/sig/mindee/errors/mindee_http_error_v2.rbs +12 -0
  77. data/sig/mindee/errors/mindee_input_error.rbs +3 -2
  78. data/sig/mindee/geometry/min_max.rbs +4 -3
  79. data/sig/mindee/geometry/point.rbs +5 -6
  80. data/sig/mindee/geometry/polygon.rbs +3 -3
  81. data/sig/mindee/geometry/quadrilateral.rbs +5 -8
  82. data/sig/mindee/geometry/utils.rbs +8 -8
  83. data/sig/mindee/http/api_settings_v2.rbs +23 -0
  84. data/sig/mindee/http/endpoint.rbs +12 -11
  85. data/sig/mindee/http/http_error_handler.rbs +8 -3
  86. data/sig/mindee/http/mindee_api_v2.rbs +18 -0
  87. data/sig/mindee/http/response_validation.rbs +1 -0
  88. data/sig/mindee/http/workflow_endpoint.rbs +1 -1
  89. data/sig/mindee/image/extracted_image.rbs +2 -2
  90. data/sig/mindee/image/image_compressor.rbs +1 -1
  91. data/sig/mindee/image/image_extractor.rbs +5 -5
  92. data/sig/mindee/image/image_utils.rbs +10 -10
  93. data/sig/mindee/input/inference_parameters.rbs +30 -0
  94. data/sig/mindee/input/local_response.rbs +6 -5
  95. data/sig/mindee/input/polling_options.rbs +12 -0
  96. data/sig/mindee/input/sources/base64_input_source.rbs +1 -1
  97. data/sig/mindee/input/sources/local_input_source.rbs +10 -7
  98. data/sig/mindee/input/sources/url_input_source.rbs +1 -1
  99. data/sig/mindee/logging/logger.rbs +2 -0
  100. data/sig/mindee/page_options.rbs +11 -0
  101. data/sig/mindee/parsing/common/api_request.rbs +6 -6
  102. data/sig/mindee/parsing/common/api_response.rbs +2 -2
  103. data/sig/mindee/parsing/common/document.rbs +10 -10
  104. data/sig/mindee/parsing/common/execution.rbs +15 -14
  105. data/sig/mindee/parsing/common/execution_file.rbs +3 -3
  106. data/sig/mindee/parsing/common/extras/cropper_extra.rbs +3 -2
  107. data/sig/mindee/parsing/common/extras/extras.rbs +6 -5
  108. data/sig/mindee/parsing/common/extras/full_text_ocr_extra.rbs +2 -1
  109. data/sig/mindee/parsing/common/inference.rbs +16 -9
  110. data/sig/mindee/parsing/common/job.rbs +2 -2
  111. data/sig/mindee/parsing/common/ocr/mvision_v1.rbs +2 -2
  112. data/sig/mindee/parsing/common/ocr/ocr.rbs +22 -20
  113. data/sig/mindee/parsing/common/orientation.rbs +4 -3
  114. data/sig/mindee/parsing/common/page.rbs +6 -5
  115. data/sig/mindee/parsing/common/product.rbs +4 -4
  116. data/sig/mindee/parsing/common/workflow_response.rbs +8 -4
  117. data/sig/mindee/parsing/standard/abstract_field.rbs +1 -1
  118. data/sig/mindee/parsing/standard/address_field.rbs +1 -1
  119. data/sig/mindee/parsing/standard/amount_field.rbs +6 -4
  120. data/sig/mindee/parsing/standard/base_field.rbs +1 -1
  121. data/sig/mindee/parsing/standard/boolean_field.rbs +1 -1
  122. data/sig/mindee/parsing/standard/company_registration_field.rbs +3 -2
  123. data/sig/mindee/parsing/standard/date_field.rbs +6 -6
  124. data/sig/mindee/parsing/standard/locale_field.rbs +1 -1
  125. data/sig/mindee/parsing/standard/payment_details_field.rbs +7 -6
  126. data/sig/mindee/parsing/standard/position_field.rbs +2 -2
  127. data/sig/mindee/parsing/standard/string_field.rbs +1 -1
  128. data/sig/mindee/parsing/standard/tax_field.rbs +8 -7
  129. data/sig/mindee/parsing/universal/universal_list_field.rbs +4 -5
  130. data/sig/mindee/parsing/universal/universal_object_field.rbs +17 -11
  131. data/sig/mindee/parsing/v2/common_response.rbs +11 -0
  132. data/sig/mindee/parsing/v2/error_response.rbs +16 -0
  133. data/sig/mindee/parsing/v2/field/base_field.rbs +17 -0
  134. data/sig/mindee/parsing/v2/field/field_confidence.rbs +27 -0
  135. data/sig/mindee/parsing/v2/field/field_location.rbs +16 -0
  136. data/sig/mindee/parsing/v2/field/inference_fields.rbs +19 -0
  137. data/sig/mindee/parsing/v2/field/list_field.rbs +22 -0
  138. data/sig/mindee/parsing/v2/field/object_field.rbs +21 -0
  139. data/sig/mindee/parsing/v2/field/simple_field.rbs +16 -0
  140. data/sig/mindee/parsing/v2/inference.rbs +16 -0
  141. data/sig/mindee/parsing/v2/inference_file.rbs +15 -0
  142. data/sig/mindee/parsing/v2/inference_model.rbs +11 -0
  143. data/sig/mindee/parsing/v2/inference_response.rbs +12 -0
  144. data/sig/mindee/parsing/v2/inference_result.rbs +13 -0
  145. data/sig/mindee/parsing/v2/inference_result_options.rbs +11 -0
  146. data/sig/mindee/parsing/v2/job.rbs +22 -0
  147. data/sig/mindee/parsing/v2/job_response.rbs +12 -0
  148. data/sig/mindee/parsing/v2/job_webhook.rbs +17 -0
  149. data/sig/mindee/parsing/v2/raw_text.rbs +12 -0
  150. data/sig/mindee/pdf/extracted_pdf.rbs +6 -6
  151. data/sig/mindee/pdf/pdf_compressor.rbs +4 -4
  152. data/sig/mindee/pdf/pdf_extractor.rbs +8 -7
  153. data/sig/mindee/pdf/pdf_processor.rbs +4 -4
  154. data/sig/mindee/pdf/pdf_tools.rbs +22 -16
  155. data/sig/mindee/product/barcode_reader/barcode_reader_v1.rbs +1 -1
  156. data/sig/mindee/product/barcode_reader/barcode_reader_v1_document.rbs +1 -1
  157. data/sig/mindee/product/barcode_reader/barcode_reader_v1_page.rbs +2 -2
  158. data/sig/mindee/product/bill_of_lading/bill_of_lading_v1.rbs +1 -1
  159. data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_carrier.rbs +2 -2
  160. data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_carrier_item.rbs +3 -3
  161. data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_consignee.rbs +2 -2
  162. data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_document.rbs +1 -1
  163. data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_notify_party.rbs +2 -2
  164. data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_page.rbs +2 -2
  165. data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_shipper.rbs +2 -2
  166. data/sig/mindee/product/business_card/business_card_v1.rbs +1 -1
  167. data/sig/mindee/product/business_card/business_card_v1_document.rbs +1 -1
  168. data/sig/mindee/product/business_card/business_card_v1_page.rbs +2 -2
  169. data/sig/mindee/product/cropper/cropper_v1.rbs +1 -1
  170. data/sig/mindee/product/cropper/cropper_v1_document.rbs +1 -1
  171. data/sig/mindee/product/cropper/cropper_v1_page.rbs +2 -2
  172. data/sig/mindee/product/delivery_note/delivery_note_v1.rbs +1 -1
  173. data/sig/mindee/product/delivery_note/delivery_note_v1_document.rbs +1 -1
  174. data/sig/mindee/product/delivery_note/delivery_note_v1_page.rbs +2 -2
  175. data/sig/mindee/product/driver_license/driver_license_v1.rbs +1 -1
  176. data/sig/mindee/product/driver_license/driver_license_v1_document.rbs +1 -1
  177. data/sig/mindee/product/driver_license/driver_license_v1_page.rbs +2 -2
  178. data/sig/mindee/product/financial_document/financial_document_v1.rbs +1 -1
  179. data/sig/mindee/product/financial_document/financial_document_v1_document.rbs +1 -1
  180. data/sig/mindee/product/financial_document/financial_document_v1_line_item.rbs +3 -3
  181. data/sig/mindee/product/financial_document/financial_document_v1_page.rbs +2 -2
  182. data/sig/mindee/product/fr/bank_account_details/bank_account_details_v1.rbs +1 -1
  183. data/sig/mindee/product/fr/bank_account_details/bank_account_details_v1_document.rbs +1 -1
  184. data/sig/mindee/product/fr/bank_account_details/bank_account_details_v1_page.rbs +2 -2
  185. data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2.rbs +1 -1
  186. data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2_bban.rbs +2 -2
  187. data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2_document.rbs +1 -1
  188. data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2_page.rbs +2 -2
  189. data/sig/mindee/product/fr/bank_statement/bank_statement_v2.rbs +1 -1
  190. data/sig/mindee/product/fr/bank_statement/bank_statement_v2_document.rbs +1 -1
  191. data/sig/mindee/product/fr/bank_statement/bank_statement_v2_page.rbs +2 -2
  192. data/sig/mindee/product/fr/bank_statement/bank_statement_v2_transaction.rbs +3 -3
  193. data/sig/mindee/product/fr/carte_grise/carte_grise_v1.rbs +1 -1
  194. data/sig/mindee/product/fr/carte_grise/carte_grise_v1_document.rbs +1 -1
  195. data/sig/mindee/product/fr/carte_grise/carte_grise_v1_page.rbs +2 -2
  196. data/sig/mindee/product/fr/energy_bill/energy_bill_v1.rbs +1 -1
  197. data/sig/mindee/product/fr/energy_bill/energy_bill_v1_document.rbs +1 -1
  198. data/sig/mindee/product/fr/energy_bill/energy_bill_v1_energy_consumer.rbs +2 -2
  199. data/sig/mindee/product/fr/energy_bill/energy_bill_v1_energy_supplier.rbs +2 -2
  200. data/sig/mindee/product/fr/energy_bill/energy_bill_v1_energy_usage.rbs +3 -3
  201. data/sig/mindee/product/fr/energy_bill/energy_bill_v1_meter_detail.rbs +2 -2
  202. data/sig/mindee/product/fr/energy_bill/energy_bill_v1_page.rbs +2 -2
  203. data/sig/mindee/product/fr/energy_bill/energy_bill_v1_subscription.rbs +3 -3
  204. data/sig/mindee/product/fr/energy_bill/energy_bill_v1_taxes_and_contribution.rbs +3 -3
  205. data/sig/mindee/product/fr/health_card/health_card_v1.rbs +1 -1
  206. data/sig/mindee/product/fr/health_card/health_card_v1_document.rbs +1 -1
  207. data/sig/mindee/product/fr/health_card/health_card_v1_page.rbs +2 -2
  208. data/sig/mindee/product/fr/id_card/id_card_v1.rbs +1 -1
  209. data/sig/mindee/product/fr/id_card/id_card_v1_document.rbs +1 -1
  210. data/sig/mindee/product/fr/id_card/id_card_v1_page.rbs +2 -2
  211. data/sig/mindee/product/fr/id_card/id_card_v2.rbs +1 -1
  212. data/sig/mindee/product/fr/id_card/id_card_v2_document.rbs +1 -1
  213. data/sig/mindee/product/fr/id_card/id_card_v2_page.rbs +2 -2
  214. data/sig/mindee/product/fr/payslip/payslip_v2.rbs +1 -1
  215. data/sig/mindee/product/fr/payslip/payslip_v2_bank_account_detail.rbs +2 -2
  216. data/sig/mindee/product/fr/payslip/payslip_v2_document.rbs +1 -1
  217. data/sig/mindee/product/fr/payslip/payslip_v2_employee.rbs +2 -2
  218. data/sig/mindee/product/fr/payslip/payslip_v2_employer.rbs +2 -2
  219. data/sig/mindee/product/fr/payslip/payslip_v2_employment.rbs +2 -2
  220. data/sig/mindee/product/fr/payslip/payslip_v2_page.rbs +2 -2
  221. data/sig/mindee/product/fr/payslip/payslip_v2_pay_detail.rbs +2 -2
  222. data/sig/mindee/product/fr/payslip/payslip_v2_pay_period.rbs +2 -2
  223. data/sig/mindee/product/fr/payslip/payslip_v2_pto.rbs +2 -2
  224. data/sig/mindee/product/fr/payslip/payslip_v2_salary_detail.rbs +3 -3
  225. data/sig/mindee/product/fr/payslip/payslip_v3.rbs +1 -1
  226. data/sig/mindee/product/fr/payslip/payslip_v3_bank_account_detail.rbs +2 -2
  227. data/sig/mindee/product/fr/payslip/payslip_v3_document.rbs +1 -1
  228. data/sig/mindee/product/fr/payslip/payslip_v3_employee.rbs +2 -2
  229. data/sig/mindee/product/fr/payslip/payslip_v3_employer.rbs +2 -2
  230. data/sig/mindee/product/fr/payslip/payslip_v3_employment.rbs +2 -2
  231. data/sig/mindee/product/fr/payslip/payslip_v3_page.rbs +2 -2
  232. data/sig/mindee/product/fr/payslip/payslip_v3_paid_time_off.rbs +3 -3
  233. data/sig/mindee/product/fr/payslip/payslip_v3_pay_detail.rbs +2 -2
  234. data/sig/mindee/product/fr/payslip/payslip_v3_pay_period.rbs +2 -2
  235. data/sig/mindee/product/fr/payslip/payslip_v3_salary_detail.rbs +3 -3
  236. data/sig/mindee/product/ind/indian_passport/indian_passport_v1.rbs +1 -1
  237. data/sig/mindee/product/ind/indian_passport/indian_passport_v1_document.rbs +1 -1
  238. data/sig/mindee/product/ind/indian_passport/indian_passport_v1_page.rbs +2 -2
  239. data/sig/mindee/product/international_id/international_id_v2.rbs +1 -1
  240. data/sig/mindee/product/international_id/international_id_v2_document.rbs +1 -1
  241. data/sig/mindee/product/international_id/international_id_v2_page.rbs +2 -2
  242. data/sig/mindee/product/invoice/invoice_v4.rbs +1 -1
  243. data/sig/mindee/product/invoice/invoice_v4_document.rbs +1 -1
  244. data/sig/mindee/product/invoice/invoice_v4_line_item.rbs +3 -3
  245. data/sig/mindee/product/invoice/invoice_v4_page.rbs +2 -2
  246. data/sig/mindee/product/invoice_splitter/invoice_splitter_v1.rbs +1 -1
  247. data/sig/mindee/product/invoice_splitter/invoice_splitter_v1_document.rbs +1 -1
  248. data/sig/mindee/product/invoice_splitter/invoice_splitter_v1_invoice_page_group.rbs +3 -3
  249. data/sig/mindee/product/invoice_splitter/invoice_splitter_v1_page.rbs +2 -2
  250. data/sig/mindee/product/multi_receipts_detector/multi_receipts_detector_v1.rbs +1 -1
  251. data/sig/mindee/product/multi_receipts_detector/multi_receipts_detector_v1_document.rbs +1 -1
  252. data/sig/mindee/product/multi_receipts_detector/multi_receipts_detector_v1_page.rbs +2 -2
  253. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1.rbs +1 -1
  254. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_added_sugar.rbs +2 -2
  255. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_calorie.rbs +2 -2
  256. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_cholesterol.rbs +2 -2
  257. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_dietary_fiber.rbs +2 -2
  258. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_document.rbs +1 -1
  259. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_nutrient.rbs +3 -3
  260. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_page.rbs +2 -2
  261. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_protein.rbs +2 -2
  262. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_saturated_fat.rbs +2 -2
  263. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_serving_size.rbs +2 -2
  264. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_sodium.rbs +2 -2
  265. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_carbohydrate.rbs +2 -2
  266. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_fat.rbs +2 -2
  267. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_sugar.rbs +2 -2
  268. data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_trans_fat.rbs +2 -2
  269. data/sig/mindee/product/passport/passport_v1.rbs +1 -1
  270. data/sig/mindee/product/passport/passport_v1_document.rbs +1 -1
  271. data/sig/mindee/product/passport/passport_v1_page.rbs +2 -2
  272. data/sig/mindee/product/receipt/receipt_v5.rbs +1 -1
  273. data/sig/mindee/product/receipt/receipt_v5_document.rbs +1 -1
  274. data/sig/mindee/product/receipt/receipt_v5_line_item.rbs +3 -3
  275. data/sig/mindee/product/receipt/receipt_v5_page.rbs +2 -2
  276. data/sig/mindee/product/resume/resume_v1.rbs +1 -1
  277. data/sig/mindee/product/resume/resume_v1_certificate.rbs +3 -3
  278. data/sig/mindee/product/resume/resume_v1_document.rbs +1 -1
  279. data/sig/mindee/product/resume/resume_v1_education.rbs +3 -3
  280. data/sig/mindee/product/resume/resume_v1_language.rbs +3 -3
  281. data/sig/mindee/product/resume/resume_v1_page.rbs +2 -2
  282. data/sig/mindee/product/resume/resume_v1_professional_experience.rbs +3 -3
  283. data/sig/mindee/product/resume/resume_v1_social_networks_url.rbs +3 -3
  284. data/sig/mindee/product/universal/universal.rbs +5 -5
  285. data/sig/mindee/product/universal/universal_document.rbs +1 -1
  286. data/sig/mindee/product/universal/universal_page.rbs +2 -2
  287. data/sig/mindee/product/universal/universal_prediction.rbs +5 -5
  288. data/sig/mindee/product/us/bank_check/bank_check_v1.rbs +1 -1
  289. data/sig/mindee/product/us/bank_check/bank_check_v1_document.rbs +1 -1
  290. data/sig/mindee/product/us/bank_check/bank_check_v1_page.rbs +2 -2
  291. data/sig/mindee/product/us/healthcare_card/healthcare_card_v1.rbs +1 -1
  292. data/sig/mindee/product/us/healthcare_card/healthcare_card_v1_copay.rbs +3 -3
  293. data/sig/mindee/product/us/healthcare_card/healthcare_card_v1_document.rbs +1 -1
  294. data/sig/mindee/product/us/healthcare_card/healthcare_card_v1_page.rbs +2 -2
  295. data/sig/mindee/product/us/us_mail/us_mail_v2.rbs +1 -1
  296. data/sig/mindee/product/us/us_mail/us_mail_v2_document.rbs +1 -1
  297. data/sig/mindee/product/us/us_mail/us_mail_v2_page.rbs +2 -2
  298. data/sig/mindee/product/us/us_mail/us_mail_v2_recipient_address.rbs +3 -3
  299. data/sig/mindee/product/us/us_mail/us_mail_v2_sender_address.rbs +2 -2
  300. data/sig/mindee/product/us/us_mail/us_mail_v3.rbs +1 -1
  301. data/sig/mindee/product/us/us_mail/us_mail_v3_document.rbs +1 -1
  302. data/sig/mindee/product/us/us_mail/us_mail_v3_page.rbs +2 -2
  303. data/sig/mindee/product/us/us_mail/us_mail_v3_recipient_address.rbs +3 -3
  304. data/sig/mindee/product/us/us_mail/us_mail_v3_sender_address.rbs +2 -2
  305. data/sig/mindee/product/us/w9/w9_v1.rbs +1 -1
  306. data/sig/mindee/product/us/w9/w9_v1_document.rbs +1 -1
  307. data/sig/mindee/product/us/w9/w9_v1_page.rbs +2 -2
  308. data/sig/mindee/version.rbs +2 -2
  309. 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 :ressources
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
- @ressources = server_response['ressources']
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, nil]
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
 
@@ -14,6 +14,8 @@ module Mindee
14
14
  @matching_document_id = raw_prediction['matching_document_id'] if raw_prediction['matching_document_id']
15
15
  end
16
16
 
17
+ # String representation.
18
+ # @return [String]
17
19
  def to_s
18
20
  @matching_document_id || ''
19
21
  end
@@ -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
- attr_accessor :confidence
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, nil]
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 = sort do |word1, word2|
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
- attr_reader :name, :type, :version
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.nil?
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.nil? ? '' : print_float(@value).to_s
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
- attr_accessor :page_id
15
+ attr_reader :page_id
16
16
 
17
17
  # List of word values
18
18
  # @return [Array<UniversalObjectField, StringField>]
19
- attr_accessor :values
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 [Hash<Symbol | String, untyped>, nil]
19
- attr_accessor :raw_value
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[Symbol | String, untyped]
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