mindee 1.1.2 → 2.0.0

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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.rubocop.yml +2 -2
  4. data/.yardopts +4 -0
  5. data/CHANGELOG.md +25 -0
  6. data/Gemfile +0 -7
  7. data/README.md +52 -21
  8. data/Rakefile +6 -1
  9. data/bin/mindee.rb +70 -61
  10. data/docs/ruby-api-builder.md +131 -0
  11. data/docs/ruby-getting-started.md +265 -0
  12. data/docs/ruby-invoice-ocr.md +261 -0
  13. data/docs/ruby-passport-ocr.md +156 -0
  14. data/docs/ruby-receipt-ocr.md +170 -0
  15. data/lib/mindee/client.rb +128 -93
  16. data/lib/mindee/document_config.rb +22 -154
  17. data/lib/mindee/geometry.rb +105 -8
  18. data/lib/mindee/http/endpoint.rb +80 -0
  19. data/lib/mindee/input/pdf_processing.rb +106 -0
  20. data/lib/mindee/input/sources.rb +97 -0
  21. data/lib/mindee/input.rb +3 -0
  22. data/lib/mindee/parsing/document.rb +31 -0
  23. data/lib/mindee/parsing/error.rb +22 -0
  24. data/lib/mindee/parsing/inference.rb +53 -0
  25. data/lib/mindee/parsing/page.rb +46 -0
  26. data/lib/mindee/parsing/prediction/base.rb +30 -0
  27. data/lib/mindee/{fields → parsing/prediction/common_fields}/amount.rb +5 -1
  28. data/lib/mindee/{fields → parsing/prediction/common_fields}/base.rb +16 -5
  29. data/lib/mindee/{fields → parsing/prediction/common_fields}/company_registration.rb +0 -0
  30. data/lib/mindee/{fields/datefield.rb → parsing/prediction/common_fields/date.rb} +0 -0
  31. data/lib/mindee/{fields → parsing/prediction/common_fields}/locale.rb +0 -0
  32. data/lib/mindee/{fields → parsing/prediction/common_fields}/payment_details.rb +0 -0
  33. data/lib/mindee/parsing/prediction/common_fields/position.rb +39 -0
  34. data/lib/mindee/{fields → parsing/prediction/common_fields}/tax.rb +7 -2
  35. data/lib/mindee/parsing/prediction/common_fields/text.rb +12 -0
  36. data/lib/mindee/parsing/prediction/common_fields.rb +11 -0
  37. data/lib/mindee/parsing/prediction/custom/custom_v1.rb +58 -0
  38. data/lib/mindee/{fields/custom_docs.rb → parsing/prediction/custom/fields.rb} +5 -5
  39. data/lib/mindee/parsing/prediction/eu/license_plate/license_plate_v1.rb +34 -0
  40. data/lib/mindee/parsing/prediction/fr/bank_account_details/bank_account_details_v1.rb +40 -0
  41. data/lib/mindee/parsing/prediction/fr/carte_vitale/carte_vitale_v1.rb +49 -0
  42. data/lib/mindee/parsing/prediction/fr/id_card/id_card_v1.rb +84 -0
  43. data/lib/mindee/parsing/prediction/invoice/invoice_line_item.rb +58 -0
  44. data/lib/mindee/parsing/prediction/invoice/invoice_v4.rb +216 -0
  45. data/lib/mindee/parsing/prediction/passport/passport_v1.rb +184 -0
  46. data/lib/mindee/parsing/prediction/receipt/receipt_v4.rb +84 -0
  47. data/lib/mindee/parsing/prediction/shipping_container/shipping_container_v1.rb +38 -0
  48. data/lib/mindee/parsing/prediction/us/bank_check/bank_check_v1.rb +70 -0
  49. data/lib/mindee/parsing/prediction.rb +12 -0
  50. data/lib/mindee/parsing.rb +4 -0
  51. data/lib/mindee/version.rb +1 -1
  52. data/mindee.gemspec +11 -5
  53. metadata +105 -30
  54. data/lib/mindee/documents/base.rb +0 -35
  55. data/lib/mindee/documents/custom.rb +0 -65
  56. data/lib/mindee/documents/financial_doc.rb +0 -135
  57. data/lib/mindee/documents/invoice.rb +0 -162
  58. data/lib/mindee/documents/passport.rb +0 -163
  59. data/lib/mindee/documents/receipt.rb +0 -109
  60. data/lib/mindee/documents.rb +0 -7
  61. data/lib/mindee/endpoint.rb +0 -105
  62. data/lib/mindee/fields/orientation.rb +0 -26
  63. data/lib/mindee/fields.rb +0 -11
  64. data/lib/mindee/inputs.rb +0 -153
  65. data/lib/mindee/response.rb +0 -27
@@ -0,0 +1,184 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mrz'
4
+
5
+ require_relative '../common_fields'
6
+ require_relative '../base'
7
+
8
+ # We need to do this disgusting thing to avoid the following error message:
9
+ # td3 line one does not match the required format (MRZ::InvalidFormatError)
10
+ #
11
+ # See:
12
+ # https://github.com/streetspotr/mrz/issues/2
13
+ # https://github.com/streetspotr/mrz/pull/3
14
+ #
15
+ MRZ::TD3Parser::FORMAT_ONE = %r{\A(.{2})(.{3})([^<]+)<(.*)\z}.freeze
16
+
17
+ module Mindee
18
+ module Prediction
19
+ # Passport document.
20
+ class PassportV1 < Prediction
21
+ # The country of issue.
22
+ # @return [Mindee::TextField]
23
+ attr_reader :country
24
+ # The passport number.
25
+ # @return [Mindee::TextField]
26
+ attr_reader :id_number
27
+ # The expiration date of the passport.
28
+ # @return [Mindee::DateField]
29
+ attr_reader :expiry_date
30
+ # The issuance date of the passport.
31
+ # @return [Mindee::DateField]
32
+ attr_reader :issuance_date
33
+ # The surname (last name) of the passport holder.
34
+ # @return [Mindee::TextField]
35
+ attr_reader :surname
36
+ # List of first (given) names of the passport holder.
37
+ # @return [Mindee::TextField]
38
+ attr_reader :given_names
39
+ # The full name of the passport holder.
40
+ # @return [Array<Mindee::TextField>]
41
+ attr_reader :full_name
42
+ # The date of birth of the passport holder.
43
+ # @return [Mindee::DateField]
44
+ attr_reader :birth_date
45
+ # The place of birth of the passport holder.
46
+ # @return [Mindee::TextField]
47
+ attr_reader :birth_place
48
+ # The sex or gender of the passport holder.
49
+ # @return [Mindee::TextField]
50
+ attr_reader :gender
51
+ # The value of the first MRZ line.
52
+ # @return [Mindee::TextField]
53
+ attr_reader :mrz1
54
+ # The value of the second MRZ line.
55
+ # @return [Mindee::TextField]
56
+ attr_reader :mrz2
57
+ # All the MRZ values combined.
58
+ # @return [Mindee::TextField]
59
+ attr_reader :mrz
60
+
61
+ # @param prediction [Hash]
62
+ # @param page_id [Integer, nil]
63
+ def initialize(prediction, page_id)
64
+ super
65
+ @country = TextField.new(prediction['country'], page_id)
66
+ @id_number = TextField.new(prediction['id_number'], page_id)
67
+ @birth_date = DateField.new(prediction['birth_date'], page_id)
68
+ @expiry_date = DateField.new(prediction['expiry_date'], page_id)
69
+ @issuance_date = DateField.new(prediction['issuance_date'], page_id)
70
+ @birth_place = TextField.new(prediction['birth_place'], page_id)
71
+ @gender = TextField.new(prediction['gender'], page_id)
72
+ @surname = TextField.new(prediction['surname'], page_id)
73
+ @mrz1 = TextField.new(prediction['mrz1'], page_id)
74
+ @mrz2 = TextField.new(prediction['mrz2'], page_id)
75
+ @given_names = []
76
+ prediction['given_names'].each do |item|
77
+ @given_names.push(TextField.new(item, page_id))
78
+ end
79
+ @full_name = construct_full_name(page_id)
80
+ @mrz = construct_mrz(page_id)
81
+ check_mrz
82
+ end
83
+
84
+ def to_s
85
+ given_names = @given_names.join(' ')
86
+ out_str = String.new
87
+ out_str << "\n:Full name: #{@full_name}".rstrip
88
+ out_str << "\n:Given names: #{given_names}".rstrip
89
+ out_str << "\n:Surname: #{@surname}".rstrip
90
+ out_str << "\n:Country: #{@country}".rstrip
91
+ out_str << "\n:ID Number: #{@id_number}".rstrip
92
+ out_str << "\n:Issuance date: #{@issuance_date}".rstrip
93
+ out_str << "\n:Birth date: #{@birth_date}".rstrip
94
+ out_str << "\n:Expiry date: #{@expiry_date}".rstrip
95
+ out_str << "\n:MRZ 1: #{@mrz1}".rstrip
96
+ out_str << "\n:MRZ 2: #{@mrz2}".rstrip
97
+ out_str << "\n:MRZ: #{@mrz}".rstrip
98
+ out_str[1..].to_s
99
+ end
100
+
101
+ # @return [Boolean]
102
+ def expired?
103
+ return true unless @expiry_date.date_object
104
+
105
+ @expiry_date.date_object < Date.today
106
+ end
107
+
108
+ private
109
+
110
+ def check_mrz
111
+ return if @mrz1.value.nil? || @mrz2.value.nil?
112
+
113
+ mrz = MRZ.parse([@mrz1.value, @mrz2.value])
114
+ checks = {
115
+ mrz_valid: valid_mrz?(mrz),
116
+ mrz_valid_birth_date: valid_birth_date?(mrz),
117
+ mrz_valid_expiry_date: valid_expiry_date?(mrz),
118
+ mrz_valid_id_number: valid_id_number?(mrz),
119
+ mrz_valid_surname: valid_surname?(mrz),
120
+ mrz_valid_country: valid_country?(mrz),
121
+ }
122
+ @checklist.merge!(checks)
123
+ end
124
+
125
+ def valid_mrz?(mrz)
126
+ check = mrz.valid?
127
+ @mrz.confidence = 1.0 if check
128
+ check
129
+ end
130
+
131
+ def valid_birth_date?(mrz)
132
+ check = mrz.valid_birth_date? && mrz.birth_date == @birth_date.date_object
133
+ @birth_date.confidence = 1.0 if check
134
+ check
135
+ end
136
+
137
+ def valid_expiry_date?(mrz)
138
+ check = mrz.valid_expiration_date? && mrz.expiration_date == @expiry_date.date_object
139
+ @expiry_date.confidence = 1.0 if check
140
+ check
141
+ end
142
+
143
+ def valid_id_number?(mrz)
144
+ check = mrz.valid_document_number? && mrz.document_number == @id_number.value
145
+ @id_number.confidence = 1.0 if check
146
+ check
147
+ end
148
+
149
+ def valid_surname?(mrz)
150
+ check = mrz.last_name == @surname.value
151
+ @surname.confidence = 1.0 if check
152
+ check
153
+ end
154
+
155
+ def valid_country?(mrz)
156
+ check = mrz.nationality == @country.value
157
+ @country.confidence = 1.0 if check
158
+ check
159
+ end
160
+
161
+ def construct_full_name(page_id)
162
+ return unless @surname.value &&
163
+ !@given_names.empty? &&
164
+ @given_names[0].value
165
+
166
+ full_name = {
167
+ 'value' => "#{@given_names[0].value} #{@surname.value}",
168
+ 'confidence' => TextField.array_confidence([@surname, @given_names[0]]),
169
+ }
170
+ TextField.new(full_name, page_id, reconstructed: true)
171
+ end
172
+
173
+ def construct_mrz(page_id)
174
+ return if @mrz1.value.nil? || @mrz2.value.nil?
175
+
176
+ mrz = {
177
+ 'value' => @mrz1.value + @mrz2.value,
178
+ 'confidence' => Mindee::TextField.array_confidence([@mrz1, @mrz2]),
179
+ }
180
+ TextField.new(mrz, page_id, reconstructed: true)
181
+ end
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../common_fields'
4
+ require_relative '../base'
5
+
6
+ module Mindee
7
+ module Prediction
8
+ # Receipt document.
9
+ class ReceiptV4 < Prediction
10
+ # Where the purchase was made, the language, and the currency.
11
+ # @return [Mindee::Locale]
12
+ attr_reader :locale
13
+ # Total including taxes
14
+ # @return [Mindee::AmountField]
15
+ attr_reader :total_amount
16
+ # Total amount of the purchase excluding taxes.
17
+ # @return [Mindee::AmountField]
18
+ attr_reader :total_net
19
+ # Total tax amount of the purchase.
20
+ # @return [Mindee::AmountField]
21
+ attr_reader :total_tax
22
+ # The purchase date.
23
+ # @return [Mindee::DateField]
24
+ attr_reader :date
25
+ # The name of the supplier or merchant, as seen on the receipt.
26
+ # @return [Mindee::TextField]
27
+ attr_reader :supplier
28
+ # List of taxes detected on the receipt.
29
+ # @return [Array<Mindee::TaxField>]
30
+ attr_reader :taxes
31
+ # Time as seen on the receipt in HH:MM format.
32
+ # @return [Mindee::TextField]
33
+ attr_reader :time
34
+ # The receipt category among predefined classes.
35
+ # @return [Mindee::TextField]
36
+ attr_reader :category
37
+ # The receipt sub-category among predefined classes.
38
+ # @return [Mindee::TextField]
39
+ attr_reader :subcategory
40
+ # Whether the document is an expense receipt or a credit card receipt.
41
+ # @return [Mindee::TextField]
42
+ attr_reader :document_type
43
+
44
+ # @param prediction [Hash]
45
+ # @param page_id [Integer, nil]
46
+ def initialize(prediction, page_id)
47
+ super
48
+ @locale = Locale.new(prediction['locale'])
49
+ @total_amount = AmountField.new(prediction['total_amount'], page_id)
50
+ @total_net = AmountField.new(prediction['total_net'], page_id)
51
+ @total_tax = AmountField.new(prediction['total_tax'], page_id)
52
+ @tip = AmountField.new(prediction['tip'], page_id)
53
+ @date = DateField.new(prediction['date'], page_id)
54
+ @category = TextField.new(prediction['category'], page_id)
55
+ @subcategory = TextField.new(prediction['subcategory'], page_id)
56
+ @document_type = TextField.new(prediction['document_type'], page_id)
57
+ @supplier = TextField.new(prediction['supplier'], page_id)
58
+ @time = TextField.new(prediction['time'], page_id)
59
+ @taxes = []
60
+ prediction['taxes'].each do |item|
61
+ @taxes.push(TaxField.new(item, page_id))
62
+ end
63
+ end
64
+
65
+ def to_s
66
+ taxes = @taxes.join("\n ")
67
+ out_str = String.new
68
+ out_str << "\n:Locale: #{@locale}".rstrip
69
+ out_str << "\n:Date: #{@date}".rstrip
70
+ out_str << "\n:Category: #{@category}".rstrip
71
+ out_str << "\n:Subcategory: #{@subcategory}".rstrip
72
+ out_str << "\n:Document type: #{@document_type}".rstrip
73
+ out_str << "\n:Time: #{@time}".rstrip
74
+ out_str << "\n:Supplier name: #{@supplier}".rstrip
75
+ out_str << "\n:Taxes: #{taxes}".rstrip
76
+ out_str << "\n:Total net: #{@total_net}".rstrip
77
+ out_str << "\n:Total taxes: #{@total_tax}".rstrip
78
+ out_str << "\n:Tip: #{@tip}".rstrip
79
+ out_str << "\n:Total amount: #{@total_amount}".rstrip
80
+ out_str[1..].to_s
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../common_fields'
4
+ require_relative '../base'
5
+
6
+ module Mindee
7
+ module Prediction
8
+ # License plate prediction.
9
+ class ShippingContainerV1 < Prediction
10
+ # ISO 6346 code for container owner prefix + equipment identifier.
11
+ # @return [Array<Mindee::TextField>]
12
+ attr_reader :owner
13
+ # ISO 6346 code for container serial number (6+1 digits).
14
+ # @return [Array<Mindee::TextField>]
15
+ attr_reader :serial_number
16
+ # ISO 6346 code for container length, height and type.
17
+ # @return [Array<Mindee::TextField>]
18
+ attr_reader :size_type
19
+
20
+ # @param prediction [Hash]
21
+ # @param page_id [Integer, nil]
22
+ def initialize(prediction, page_id)
23
+ super
24
+ @owner = TextField.new(prediction['owner'], page_id)
25
+ @serial_number = TextField.new(prediction['serial_number'], page_id)
26
+ @size_type = TextField.new(prediction['size_type'], page_id)
27
+ end
28
+
29
+ def to_s
30
+ out_str = String.new
31
+ out_str << "\n:Owner: #{@owner}".rstrip
32
+ out_str << "\n:Serial number: #{@serial_number}".rstrip
33
+ out_str << "\n:Size and type: #{@size_type}".rstrip
34
+ out_str[1..].to_s
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../common_fields'
4
+ require_relative '../../base'
5
+
6
+ module Mindee
7
+ module Prediction
8
+ module US
9
+ # License plate prediction.
10
+ class BankCheckV1 < Prediction
11
+ # Payer's bank account number.
12
+ # @return [Array<Mindee::TextField>]
13
+ attr_reader :account_number
14
+ # Amount to be paid.
15
+ # @return [Array<Mindee::AmountField>]
16
+ attr_reader :amount
17
+ # The check number.
18
+ # @return [Mindee::TextField]
19
+ attr_reader :check_number
20
+ # Payer's bank account routing number.
21
+ # @return [Mindee::TextField]
22
+ attr_reader :routing_number
23
+ # Date the check was issued.
24
+ # @return [Mindee::DateField]
25
+ attr_reader :date
26
+ # The positions of the signatures on the image.
27
+ # @return [Array<Mindee::PositionField>]
28
+ attr_reader :signatures_positions
29
+ # Check's position in the image.
30
+ # @return [Mindee::PositionField]
31
+ attr_reader :check_position
32
+ # List of payees (full name or company name).
33
+ # @return [Array<Mindee::TextField>]
34
+ attr_reader :payees
35
+
36
+ # @param prediction [Hash]
37
+ # @param page_id [Integer, nil]
38
+ def initialize(prediction, page_id)
39
+ super
40
+ @account_number = TextField.new(prediction['account_number'], page_id)
41
+ @amount = AmountField.new(prediction['amount'], page_id)
42
+ @check_number = TextField.new(prediction['check_number'], page_id)
43
+ @date = DateField.new(prediction['date'], page_id)
44
+ @check_position = PositionField.new(prediction['check_position'], page_id)
45
+ @routing_number = TextField.new(prediction['routing_number'], page_id)
46
+ @signatures_positions = []
47
+ prediction['signatures_positions'].each do |item|
48
+ @signatures_positions.push(PositionField.new(item, page_id))
49
+ end
50
+ @payees = []
51
+ prediction['payees'].each do |item|
52
+ @payees.push(TextField.new(item, page_id))
53
+ end
54
+ end
55
+
56
+ def to_s
57
+ payees = @payees.map(&:value).join(', ')
58
+ out_str = String.new
59
+ out_str << "\n:Routing number: #{@routing_number}".rstrip
60
+ out_str << "\n:Account number: #{@account_number}".rstrip
61
+ out_str << "\n:Check number: #{@check_number}".rstrip
62
+ out_str << "\n:Date: #{@date}".rstrip
63
+ out_str << "\n:Amount: #{@amount}".rstrip
64
+ out_str << "\n:Payees: #{payees}".rstrip
65
+ out_str[1..].to_s
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'prediction/custom/custom_v1'
4
+ require_relative 'prediction/invoice/invoice_v4'
5
+ require_relative 'prediction/passport/passport_v1'
6
+ require_relative 'prediction/receipt/receipt_v4'
7
+ require_relative 'prediction/eu/license_plate/license_plate_v1'
8
+ require_relative 'prediction/shipping_container/shipping_container_v1'
9
+ require_relative 'prediction/us/bank_check/bank_check_v1'
10
+ require_relative 'prediction/fr/bank_account_details/bank_account_details_v1'
11
+ require_relative 'prediction/fr/carte_vitale/carte_vitale_v1'
12
+ require_relative 'prediction/fr/id_card/id_card_v1'
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'parsing/prediction'
4
+ require_relative 'parsing/document'
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Mindee
4
4
  module Mindee
5
- VERSION = '1.1.2'
5
+ VERSION = '2.0.0'
6
6
 
7
7
  def self.find_platform
8
8
  host = RbConfig::CONFIG['host_os']
data/mindee.gemspec CHANGED
@@ -5,14 +5,13 @@ require_relative 'lib/mindee/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'mindee'
7
7
  spec.version = Mindee::VERSION
8
- spec.authors = ['Mindee']
8
+ spec.authors = ['Mindee, SA']
9
9
  spec.email = ['devrel@mindee.co']
10
10
 
11
11
  spec.summary = 'Mindee API Helper Library for Ruby'
12
- # spec.description = %q{TODO: Write a longer description or delete this line.}
12
+ spec.description = "Quickly and easily connect to Mindee's API services using Ruby."
13
13
  spec.homepage = 'https://github.com/mindee/mindee-api-ruby'
14
14
  spec.license = 'MIT'
15
- spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
16
15
 
17
16
  spec.metadata['homepage_uri'] = 'https://mindee.com/'
18
17
  spec.metadata['source_code_uri'] = 'https://github.com/mindee/mindee-api-ruby'
@@ -28,7 +27,14 @@ Gem::Specification.new do |spec|
28
27
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
29
28
  spec.require_paths = ['lib']
30
29
 
30
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.6')
31
+
31
32
  spec.add_runtime_dependency 'marcel', '~> 1.0.2'
32
- spec.add_runtime_dependency 'mrz', '~> 0.2.0'
33
- spec.add_runtime_dependency 'origami', '~> 2.1.0'
33
+ spec.add_runtime_dependency 'mrz', '~> 0.2'
34
+ spec.add_runtime_dependency 'origamindee', '~> 3.1'
35
+
36
+ spec.add_development_dependency 'rake', '~> 12.3.1'
37
+ spec.add_development_dependency 'rspec', '~> 3.11'
38
+ spec.add_development_dependency 'rubocop', '~> 1.41'
39
+ spec.add_development_dependency 'yard', '0.9.28'
34
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mindee
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Mindee
7
+ - Mindee, SA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-23 00:00:00.000000000 Z
11
+ date: 2023-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: marcel
@@ -30,29 +30,85 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.0
33
+ version: '0.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.0
40
+ version: '0.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: origami
42
+ name: origamindee
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 2.1.0
47
+ version: '3.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 2.1.0
55
- description:
54
+ version: '3.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 12.3.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 12.3.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.11'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.11'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.41'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.41'
97
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.28
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.9.28
111
+ description: Quickly and easily connect to Mindee's API services using Ruby.
56
112
  email:
57
113
  - devrel@mindee.co
58
114
  executables:
@@ -65,6 +121,7 @@ files:
65
121
  - ".gitignore"
66
122
  - ".gitmodules"
67
123
  - ".rubocop.yml"
124
+ - ".yardopts"
68
125
  - CHANGELOG.md
69
126
  - CODE_OF_CONDUCT.md
70
127
  - CONTRIBUTING.md
@@ -74,30 +131,48 @@ files:
74
131
  - Rakefile
75
132
  - bin/console
76
133
  - bin/mindee.rb
134
+ - docs/ruby-api-builder.md
135
+ - docs/ruby-getting-started.md
136
+ - docs/ruby-invoice-ocr.md
137
+ - docs/ruby-passport-ocr.md
138
+ - docs/ruby-receipt-ocr.md
77
139
  - lib/mindee.rb
78
140
  - lib/mindee/client.rb
79
141
  - lib/mindee/document_config.rb
80
- - lib/mindee/documents.rb
81
- - lib/mindee/documents/base.rb
82
- - lib/mindee/documents/custom.rb
83
- - lib/mindee/documents/financial_doc.rb
84
- - lib/mindee/documents/invoice.rb
85
- - lib/mindee/documents/passport.rb
86
- - lib/mindee/documents/receipt.rb
87
- - lib/mindee/endpoint.rb
88
- - lib/mindee/fields.rb
89
- - lib/mindee/fields/amount.rb
90
- - lib/mindee/fields/base.rb
91
- - lib/mindee/fields/company_registration.rb
92
- - lib/mindee/fields/custom_docs.rb
93
- - lib/mindee/fields/datefield.rb
94
- - lib/mindee/fields/locale.rb
95
- - lib/mindee/fields/orientation.rb
96
- - lib/mindee/fields/payment_details.rb
97
- - lib/mindee/fields/tax.rb
98
142
  - lib/mindee/geometry.rb
99
- - lib/mindee/inputs.rb
100
- - lib/mindee/response.rb
143
+ - lib/mindee/http/endpoint.rb
144
+ - lib/mindee/input.rb
145
+ - lib/mindee/input/pdf_processing.rb
146
+ - lib/mindee/input/sources.rb
147
+ - lib/mindee/parsing.rb
148
+ - lib/mindee/parsing/document.rb
149
+ - lib/mindee/parsing/error.rb
150
+ - lib/mindee/parsing/inference.rb
151
+ - lib/mindee/parsing/page.rb
152
+ - lib/mindee/parsing/prediction.rb
153
+ - lib/mindee/parsing/prediction/base.rb
154
+ - lib/mindee/parsing/prediction/common_fields.rb
155
+ - lib/mindee/parsing/prediction/common_fields/amount.rb
156
+ - lib/mindee/parsing/prediction/common_fields/base.rb
157
+ - lib/mindee/parsing/prediction/common_fields/company_registration.rb
158
+ - lib/mindee/parsing/prediction/common_fields/date.rb
159
+ - lib/mindee/parsing/prediction/common_fields/locale.rb
160
+ - lib/mindee/parsing/prediction/common_fields/payment_details.rb
161
+ - lib/mindee/parsing/prediction/common_fields/position.rb
162
+ - lib/mindee/parsing/prediction/common_fields/tax.rb
163
+ - lib/mindee/parsing/prediction/common_fields/text.rb
164
+ - lib/mindee/parsing/prediction/custom/custom_v1.rb
165
+ - lib/mindee/parsing/prediction/custom/fields.rb
166
+ - lib/mindee/parsing/prediction/eu/license_plate/license_plate_v1.rb
167
+ - lib/mindee/parsing/prediction/fr/bank_account_details/bank_account_details_v1.rb
168
+ - lib/mindee/parsing/prediction/fr/carte_vitale/carte_vitale_v1.rb
169
+ - lib/mindee/parsing/prediction/fr/id_card/id_card_v1.rb
170
+ - lib/mindee/parsing/prediction/invoice/invoice_line_item.rb
171
+ - lib/mindee/parsing/prediction/invoice/invoice_v4.rb
172
+ - lib/mindee/parsing/prediction/passport/passport_v1.rb
173
+ - lib/mindee/parsing/prediction/receipt/receipt_v4.rb
174
+ - lib/mindee/parsing/prediction/shipping_container/shipping_container_v1.rb
175
+ - lib/mindee/parsing/prediction/us/bank_check/bank_check_v1.rb
101
176
  - lib/mindee/version.rb
102
177
  - mindee.gemspec
103
178
  homepage: https://github.com/mindee/mindee-api-ruby
@@ -116,7 +191,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
191
  requirements:
117
192
  - - ">="
118
193
  - !ruby/object:Gem::Version
119
- version: 2.6.0
194
+ version: '2.6'
120
195
  required_rubygems_version: !ruby/object:Gem::Requirement
121
196
  requirements:
122
197
  - - ">="
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Mindee
4
- # Base document object.
5
- class Document
6
- # document type
7
- # @return [String]
8
- attr_reader :document_type
9
- # Validation checks for the document
10
- # @return [Hash<Symbol, Boolean>]
11
- attr_reader :checklist
12
- # Original filename of the document
13
- # @return [String, nil]
14
- attr_reader :filename
15
- # Detected MIME type of the document
16
- # @return [String, nil]
17
- attr_reader :file_mimetype
18
-
19
- # @param input_file [Mindee::InputDocument, nil]
20
- # @param document_type [String]
21
- def initialize(document_type, input_file: nil)
22
- @document_type = document_type
23
- unless input_file.nil?
24
- @filename = input_file.filename
25
- @file_mimetype = input_file.file_mimetype
26
- end
27
- @checklist = {}
28
- end
29
-
30
- # @return [Boolean]
31
- def all_checks
32
- @checklist.all? { |_, value| value == true }
33
- end
34
- end
35
- end