ocrsdk 0.2.0 → 0.3.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.
- data/README.md +8 -0
- data/VERSION +1 -1
- data/lib/ocrsdk.rb +21 -3
- data/lib/ocrsdk/abstract_entity.rb +1 -1
- data/lib/ocrsdk/image.rb +2 -2
- data/lib/ocrsdk/mock.rb +1 -0
- data/lib/ocrsdk/promise.rb +9 -5
- data/ocrsdk.gemspec +1 -0
- data/spec/ocrsdk/image_spec.rb +1 -1
- data/spec/ocrsdk/promise_spec.rb +13 -4
- data/spec/ocrsdk_spec.rb +1 -5
- metadata +18 -2
data/README.md
CHANGED
@@ -25,6 +25,14 @@ Configuration
|
|
25
25
|
OCRSDK.setup do |config|
|
26
26
|
config.application_id = '99bottlesofbeer'
|
27
27
|
config.password = '98bottlesofbeer'
|
28
|
+
|
29
|
+
# How much time in seconds wait between requests
|
30
|
+
config.default_poll_time = 3 # default
|
31
|
+
|
32
|
+
# How many times retry before rendering request as failed
|
33
|
+
config.number_or_retries = 3 # default
|
34
|
+
# How much time wait before retries
|
35
|
+
config.retry_wait_time = 3 # default
|
28
36
|
end
|
29
37
|
```
|
30
38
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/ocrsdk.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'cgi'
|
2
2
|
require 'uri'
|
3
3
|
require 'nokogiri'
|
4
|
+
require 'retryable'
|
4
5
|
require 'pdf-reader'
|
5
6
|
require 'rest-client'
|
6
7
|
require 'active_support/inflector'
|
@@ -11,14 +12,31 @@ require 'active_support/configurable'
|
|
11
12
|
module OCRSDK
|
12
13
|
include ActiveSupport::Configurable
|
13
14
|
|
14
|
-
DEFAULT_POLL_TIME = 3
|
15
|
-
SERVICE_URL = 'cloud.ocrsdk.com'
|
16
|
-
|
17
15
|
def self.setup
|
18
16
|
yield config
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
20
|
+
# Default configuration values
|
21
|
+
OCRSDK.setup do |config|
|
22
|
+
# These two should be set by user
|
23
|
+
config.application_id = nil
|
24
|
+
config.password = nil
|
25
|
+
|
26
|
+
# Generally this is not the thing you would want to change
|
27
|
+
# but in some rare cases like access to test servers
|
28
|
+
# it might be useful
|
29
|
+
config.service_url = 'cloud.ocrsdk.com'
|
30
|
+
|
31
|
+
# How much time in seconds wait between requests
|
32
|
+
config.default_poll_time = 3 # seconds
|
33
|
+
|
34
|
+
# How many times retry before rendering request as failed
|
35
|
+
config.number_or_retries = 3 # times
|
36
|
+
# How much time wait before retries
|
37
|
+
config.retry_wait_time = 3 # seconds
|
38
|
+
end
|
39
|
+
|
22
40
|
require 'ocrsdk/errors'
|
23
41
|
require 'ocrsdk/verifiers'
|
24
42
|
require 'ocrsdk/abstract_entity'
|
data/lib/ocrsdk/image.rb
CHANGED
@@ -14,7 +14,7 @@ class OCRSDK::Image < OCRSDK::AbstractEntity
|
|
14
14
|
OCRSDK::Promise.from_response xml_string
|
15
15
|
end
|
16
16
|
|
17
|
-
def as_text_sync(languages, wait_interval=OCRSDK
|
17
|
+
def as_text_sync(languages, wait_interval=OCRSDK.config.default_poll_time)
|
18
18
|
as_text(languages).wait(wait_interval).result.force_encoding('utf-8')
|
19
19
|
end
|
20
20
|
|
@@ -24,7 +24,7 @@ class OCRSDK::Image < OCRSDK::AbstractEntity
|
|
24
24
|
OCRSDK::Promise.from_response xml_string
|
25
25
|
end
|
26
26
|
|
27
|
-
def as_pdf_sync(languages, out_path=nil, wait_interval=OCRSDK
|
27
|
+
def as_pdf_sync(languages, out_path=nil, wait_interval=OCRSDK.config.default_poll_time)
|
28
28
|
result = as_pdf(languages).wait(wait_interval).result
|
29
29
|
|
30
30
|
if out_path.nil?
|
data/lib/ocrsdk/mock.rb
CHANGED
data/lib/ocrsdk/promise.rb
CHANGED
@@ -36,8 +36,10 @@ class OCRSDK::Promise < OCRSDK::AbstractEntity
|
|
36
36
|
self
|
37
37
|
end
|
38
38
|
|
39
|
-
def update
|
40
|
-
|
39
|
+
def update(retry_sleep=OCRSDK.config.retry_wait_time)
|
40
|
+
retryable tries: OCRSDK.config.number_or_retries, on: OCRSDK::NetworkError, sleep: retry_sleep do
|
41
|
+
parse_response api_update_status
|
42
|
+
end
|
41
43
|
end
|
42
44
|
|
43
45
|
def completed?
|
@@ -52,12 +54,14 @@ class OCRSDK::Promise < OCRSDK::AbstractEntity
|
|
52
54
|
[:submitted, :queued, :in_progress].include? @status
|
53
55
|
end
|
54
56
|
|
55
|
-
def result
|
57
|
+
def result(retry_sleep=OCRSDK.config.retry_wait_time)
|
56
58
|
raise OCRSDK::ProcessingFailed if failed?
|
57
|
-
|
59
|
+
retryable tries: OCRSDK.config.number_or_retries, on: OCRSDK::NetworkError, sleep: retry_sleep do
|
60
|
+
api_get_result
|
61
|
+
end
|
58
62
|
end
|
59
63
|
|
60
|
-
def wait(seconds=OCRSDK
|
64
|
+
def wait(seconds=OCRSDK.config.default_poll_time)
|
61
65
|
while processing? do
|
62
66
|
sleep seconds
|
63
67
|
update
|
data/ocrsdk.gemspec
CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.add_runtime_dependency "nokogiri"
|
17
17
|
s.add_runtime_dependency "pdf-reader"
|
18
18
|
s.add_runtime_dependency "activesupport"
|
19
|
+
s.add_runtime_dependency "retryable"
|
19
20
|
|
20
21
|
s.add_development_dependency "rake", ">= 0.8"
|
21
22
|
if RUBY_VERSION >= '1.9'
|
data/spec/ocrsdk/image_spec.rb
CHANGED
@@ -79,7 +79,7 @@ describe OCRSDK::Image do
|
|
79
79
|
|
80
80
|
it "should do a post request with correct url and file attached" do
|
81
81
|
RestClient.stub(:post) do |uri, params|
|
82
|
-
uri.to_s.should == "http://app_id:pass
|
82
|
+
uri.to_s.should == "http://app_id:pass@cloud.ocrsdk.com/processImage?language=Russian%2CEnglish&exportFormat=txt&profile=documentConversion"
|
83
83
|
params[:upload][:file].should be_kind_of(File)
|
84
84
|
end
|
85
85
|
RestClient.should_receive(:post).once
|
data/spec/ocrsdk/promise_spec.rb
CHANGED
@@ -60,6 +60,15 @@ describe OCRSDK::Promise do
|
|
60
60
|
|
61
61
|
its(:task_id) { should == 'update-task-id' }
|
62
62
|
its(:status) { should == :in_progress }
|
63
|
+
|
64
|
+
it "should raise a NetworkError in case REST request fails, and retry 3 times" do
|
65
|
+
RestClient.stub(:get) {|url| raise RestClient::ExceptionWithResponse }
|
66
|
+
RestClient.should_receive(:get).exactly(3)
|
67
|
+
|
68
|
+
expect {
|
69
|
+
subject.result(0)
|
70
|
+
}.to raise_error(OCRSDK::NetworkError)
|
71
|
+
end
|
63
72
|
end
|
64
73
|
|
65
74
|
describe ".api_update_status" do
|
@@ -67,7 +76,7 @@ describe OCRSDK::Promise do
|
|
67
76
|
|
68
77
|
it "should make an api call with correct url" do
|
69
78
|
RestClient.stub(:get) do |url|
|
70
|
-
url.to_s.should == "http://app_id:pass
|
79
|
+
url.to_s.should == "http://app_id:pass@cloud.ocrsdk.com/getTaskStatus?taskId=test"
|
71
80
|
end
|
72
81
|
RestClient.should_receive(:get).once
|
73
82
|
subject.instance_eval { api_update_status }
|
@@ -90,12 +99,12 @@ describe OCRSDK::Promise do
|
|
90
99
|
|
91
100
|
its(:result) { should == 'meow' }
|
92
101
|
|
93
|
-
it "should raise NetworkError in case getting file fails" do
|
102
|
+
it "should raise NetworkError in case getting file fails, but retry 3 times before failing" do
|
94
103
|
RestClient.stub(:get) {|url| raise RestClient::ExceptionWithResponse }
|
95
|
-
RestClient.should_receive(:get).
|
104
|
+
RestClient.should_receive(:get).exactly(3)
|
96
105
|
|
97
106
|
expect {
|
98
|
-
subject.result
|
107
|
+
subject.result(0)
|
99
108
|
}.to raise_error(OCRSDK::NetworkError)
|
100
109
|
end
|
101
110
|
end
|
data/spec/ocrsdk_spec.rb
CHANGED
@@ -2,10 +2,6 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe OCRSDK do
|
5
|
-
it "should have service url" do
|
6
|
-
OCRSDK::SERVICE_URL.length.should > 0
|
7
|
-
end
|
8
|
-
|
9
5
|
it "should be configurable" do
|
10
6
|
OCRSDK.setup do |config|
|
11
7
|
config.application_id = 'meow'
|
@@ -15,4 +11,4 @@ describe OCRSDK do
|
|
15
11
|
OCRSDK.config.application_id.should == 'meow'
|
16
12
|
OCRSDK.config.password.should == 'purr'
|
17
13
|
end
|
18
|
-
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocrsdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -75,6 +75,22 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: retryable
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
78
94
|
- !ruby/object:Gem::Dependency
|
79
95
|
name: rake
|
80
96
|
requirement: !ruby/object:Gem::Requirement
|