email_vision 0.2.2 → 0.2.3
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/VERSION +1 -1
- data/email_vision.gemspec +1 -1
- data/lib/email_vision.rb +28 -11
- data/spec/email_vision_spec.rb +41 -0
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
data/email_vision.gemspec
CHANGED
data/lib/email_vision.rb
CHANGED
@@ -70,17 +70,7 @@ class EmailVision
|
|
70
70
|
private
|
71
71
|
|
72
72
|
def connection
|
73
|
-
unless connected?
|
74
|
-
response = client.request :open_api_connection do |r|
|
75
|
-
r.body = {
|
76
|
-
:login => options[:login],
|
77
|
-
:pwd => options[:password],
|
78
|
-
:key => options[:key]
|
79
|
-
}
|
80
|
-
end
|
81
|
-
@token = response.to_hash[:open_api_connection_response][:return]
|
82
|
-
@token_requested = Time.now.to_i
|
83
|
-
end
|
73
|
+
connect! unless connected?
|
84
74
|
client
|
85
75
|
end
|
86
76
|
|
@@ -94,6 +84,18 @@ class EmailVision
|
|
94
84
|
@token and @token_requested > (Time.now.to_i - SESSION_TIMEOUT)
|
95
85
|
end
|
96
86
|
|
87
|
+
def connect!
|
88
|
+
response = client.request :open_api_connection do |r|
|
89
|
+
r.body = {
|
90
|
+
:login => options[:login],
|
91
|
+
:pwd => options[:password],
|
92
|
+
:key => options[:key]
|
93
|
+
}
|
94
|
+
end
|
95
|
+
@token = response.to_hash[:open_api_connection_response][:return]
|
96
|
+
@token_requested = Time.now.to_i
|
97
|
+
end
|
98
|
+
|
97
99
|
def execute_by_email_or_id(method, email_or_id)
|
98
100
|
if email_or_id.to_s.include?('@')
|
99
101
|
execute("#{method}_by_email", :email => email_or_id)
|
@@ -120,6 +122,21 @@ class EmailVision
|
|
120
122
|
def execute(method, options={})
|
121
123
|
response = connection.request(method){|r| r.body = options.merge(:token => @token) }
|
122
124
|
response.to_hash["#{method}_response".to_sym][:return]
|
125
|
+
rescue Object => e
|
126
|
+
if e.respond_to?(:http) and e.http.respond_to?(:body)
|
127
|
+
retries ||= -1
|
128
|
+
retries += 1
|
129
|
+
session_error = (e.http.body =~ /status>(SESSION_RETRIEVING_FAILED|CHECK_SESSION_FAILED)</)
|
130
|
+
if session_error
|
131
|
+
if retries < 1
|
132
|
+
connect!
|
133
|
+
retry
|
134
|
+
else
|
135
|
+
e.message << " -- retried #{retries}"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
raise e
|
123
140
|
end
|
124
141
|
|
125
142
|
def convert_to_hash(entries, key, value)
|
data/spec/email_vision_spec.rb
CHANGED
@@ -7,6 +7,16 @@ describe "EmailVision" do
|
|
7
7
|
let(:random_value){rand(11111111111).to_s}
|
8
8
|
let(:expired_token){'Duy-M5FktALawBJ7dZN94s6hLEgLGKXC_j7cCqlDUMXRGw2shqHYbR9Zud_19EBtFkSCbJ0ZmrZ_d0ieBqgR'}
|
9
9
|
|
10
|
+
def error_with_status(status)
|
11
|
+
# mock / stub did not work...
|
12
|
+
$the_status = status
|
13
|
+
http = ""
|
14
|
+
def http.error?; true; end
|
15
|
+
def http.body; "<status>#{$the_status}</status>"; end
|
16
|
+
def http.code; 500; end
|
17
|
+
Savon::HTTP::Error.new(http)
|
18
|
+
end
|
19
|
+
|
10
20
|
# updates need some time to finish on the server...
|
11
21
|
def wait_for_job_to_finish
|
12
22
|
client.wait_for_job_to_finish yield
|
@@ -63,6 +73,37 @@ describe "EmailVision" do
|
|
63
73
|
end
|
64
74
|
end
|
65
75
|
|
76
|
+
describe 'error handling' do
|
77
|
+
before do
|
78
|
+
@connection = client.send(:connection)
|
79
|
+
client.stub!(:connection).and_return @connection
|
80
|
+
end
|
81
|
+
|
82
|
+
it "retries if it failed due to session timeout" do
|
83
|
+
error = error_with_status("CHECK_SESSION_FAILED")
|
84
|
+
@connection.should_receive(:request).exactly(2).and_raise(error)
|
85
|
+
lambda{
|
86
|
+
client.find('aaaa')
|
87
|
+
}.should raise_error#(error)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "retries if it failed due to maximum request per session" do
|
91
|
+
error = error_with_status("SESSION_RETRIEVING_FAILED")
|
92
|
+
@connection.should_receive(:request).exactly(2).and_raise(error)
|
93
|
+
lambda{
|
94
|
+
client.find('aaaa')
|
95
|
+
}.should raise_error#(error)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "does not retry if it failed otherwise" do
|
99
|
+
error = error_with_status("FOO_BAR")
|
100
|
+
@connection.should_receive(:request).exactly(1).and_raise(error)
|
101
|
+
lambda{
|
102
|
+
client.find('aaaa')
|
103
|
+
}.should raise_error#(error)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
66
107
|
describe :update do
|
67
108
|
it "can update an attribute" do
|
68
109
|
wait_for_job_to_finish do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: email_vision
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Grosser
|