Class: Gini::Api::Document
- Inherits:
-
Object
- Object
- Gini::Api::Document
- Defined in:
- lib/gini-api/document.rb
Overview
Contains document related data from uploaded or fetched document
Defined Under Namespace
Classes: Extractions, Layout
Instance Attribute Summary collapse
-
#duration ⇒ Object
Returns the value of attribute duration.
Instance Method Summary collapse
-
#completed? ⇒ Boolean
Indicate if the document has been processed.
-
#extractions(incubator = false) ⇒ Gini::Api::Document::Extractions
Initialize extractions from @_links and return Gini::Api::Extractions object.
-
#initialize(api, location, from_data = nil) ⇒ Document
constructor
Instantiate a new Gini::Api::Document object from URL.
-
#layout ⇒ Gini::Api::Document::Layout
Initialize layout from @_links and return Gini::Api::Layout object.
-
#pages ⇒ Object
Override @pages instance variable.
-
#poll(interval, &block) ⇒ Object
Poll document progress and return when state equals COMPLETED Known states are PENDING, COMPLETED and ERROR.
-
#processed ⇒ data
Get processed document.
-
#report_error(summary = nil, description = nil) ⇒ String
Submit error report on document.
-
#submit_feedback(label, value) ⇒ Object
deprecated
Deprecated.
Use ‘doc.extractions.LABEL = VALUE’ instead. Will be removed in next version
-
#successful? ⇒ Boolean
Was the document processed successfully?.
-
#update(from_data = nil) ⇒ Object
Fetch document resource and populate instance variables.
Constructor Details
#initialize(api, location, from_data = nil) ⇒ Document
Instantiate a new Gini::Api::Document object from URL
16 17 18 19 20 21 |
# File 'lib/gini-api/document.rb', line 16 def initialize(api, location, from_data = nil) @api = api @location = location update(from_data) end |
Instance Attribute Details
#duration ⇒ Object
Returns the value of attribute duration.
8 9 10 |
# File 'lib/gini-api/document.rb', line 8 def duration @duration end |
Instance Method Details
#completed? ⇒ Boolean
Indicate if the document has been processed
71 72 73 |
# File 'lib/gini-api/document.rb', line 71 def completed? @progress != 'PENDING' end |
#extractions(incubator = false) ⇒ Gini::Api::Document::Extractions
Initialize extractions from @_links and return Gini::Api::Extractions object
108 109 110 |
# File 'lib/gini-api/document.rb', line 108 def extractions(incubator = false) @extractions ||= Gini::Api::Document::Extractions.new(@api, @_links[:extractions], incubator) end |
#layout ⇒ Gini::Api::Document::Layout
Initialize layout from @_links and return Gini::Api::Layout object
116 117 118 |
# File 'lib/gini-api/document.rb', line 116 def layout @layout ||= Gini::Api::Document::Layout.new(@api, @_links[:layout]) end |
#pages ⇒ Object
Override @pages instance variable. Removes key :pageNumber, key :images and starts by index 0. Page 1 becomes index 0
123 124 125 |
# File 'lib/gini-api/document.rb', line 123 def pages @pages.map { |page| page[:images] } end |
#poll(interval, &block) ⇒ Object
Poll document progress and return when state equals COMPLETED Known states are PENDING, COMPLETED and ERROR
58 59 60 61 62 63 64 65 |
# File 'lib/gini-api/document.rb', line 58 def poll(interval, &block) until @progress =~ /(COMPLETED|ERROR)/ do update yield self if block_given? sleep(interval) end nil end |
#processed ⇒ data
Get processed document
87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/gini-api/document.rb', line 87 def processed response = @api.request( :get, @_links[:processed], headers: { accept: 'application/octet-stream' } ) unless response.status == 200 raise Gini::Api::DocumentError.new( "Failed to fetch processed document (code=#{response.status})", response ) end response.body end |
#report_error(summary = nil, description = nil) ⇒ String
Submit error report on document
158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/gini-api/document.rb', line 158 def report_error(summary = nil, description = nil) response = @api.request( :post, "#{@_links[:document]}/errorreport", params: { summary: summary, description: description } ) unless response.status == 200 raise Gini::Api::DocumentError.new( "Failed to submit error report for document #{@id} (code=#{response.status})", response ) end response.parsed[:errorId] end |
#submit_feedback(label, value) ⇒ Object
Use ‘doc.extractions.LABEL = VALUE’ instead. Will be removed in next version
Submit feedback on extraction label
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/gini-api/document.rb', line 133 def submit_feedback(label, value) unless extractions.send(label.to_sym) raise Gini::Api::DocumentError.new("Unknown label #{label}: Not found") end response = @api.request( :put, "#{@_links[:extractions]}/#{label}", headers: { 'content-type' => @api.version_header[:accept] }, body: { value: value }.to_json ) unless response.status == 204 raise Gini::Api::DocumentError.new( "Failed to submit feedback for label #{label} (code=#{response.status})", response ) end end |
#successful? ⇒ Boolean
Was the document processed successfully?
79 80 81 |
# File 'lib/gini-api/document.rb', line 79 def successful? @progress == 'COMPLETED' end |
#update(from_data = nil) ⇒ Object
Fetch document resource and populate instance variables
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/gini-api/document.rb', line 27 def update(from_data = nil) data = {} if from_data.nil? response = @api.request(:get, @location) unless response.status == 200 raise Gini::Api::DocumentError.new( "Failed to fetch document data (code=#{response.status})", response ) end data = response.parsed else data = from_data end data.each do |k, v| instance_variable_set("@#{k}", v) # We skip pages as it's rewritted by method pages() next if k == :pages self.class.send(:attr_reader, k) end end |