flexirest 1.7.3 → 1.7.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/docs/using-callbacks.md +2 -2
- data/lib/flexirest/callbacks.rb +3 -1
- data/lib/flexirest/request.rb +7 -6
- data/lib/flexirest/version.rb +1 -1
- data/spec/lib/request_spec.rb +26 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c923ce76f5b90c0bdb2fba0090bf7f7c0e9a8b3
|
4
|
+
data.tar.gz: deb9b3f6c36c9507fbba1a0bd98a485dd1828124
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 430b70a85bf6b8d5cd77eb6d6440e55245ef9915ca8adfd5c76d26bde7c4a6c36ecdbc4e7bc5ed9bdb8176191ecf5b1c2c0f9e63a51da0f2f16cf092f2d66f16
|
7
|
+
data.tar.gz: 500dbc7e0637b9f48c9476f6a099fd12815ab21a49fc69357cd30d110378020d1e9710354c21a11215d621e48719ac8f18817be07883e7d818b6d3dcbadcaafd
|
data/CHANGELOG.md
CHANGED
data/docs/using-callbacks.md
CHANGED
@@ -88,7 +88,7 @@ end
|
|
88
88
|
|
89
89
|
**Note:** since v1.3.21 the empty response trick above isn't necessary, empty responses for 204 are accepted normally (the method returns `true`), but this is here to show an example of an `after_request` callback adjusting the body. The `cache_all_people` example shows how to cache a response even if the server doesn't send the correct headers.
|
90
90
|
|
91
|
-
If you want to trap an error in an `after_request` callback and retry the request, this can be done - but retries will only happen once for each request (so we'd recommend checking all conditions in a single `after_request` and then retrying after fixing them all). You achieve this by
|
91
|
+
If you want to trap an error in an `after_request` callback and retry the request, this can be done - but retries will only happen once for each request (so we'd recommend checking all conditions in a single `after_request` and then retrying after fixing them all). You achieve this by raising a `Flexirest::CallbackRetryRequestException` from the callback.
|
92
92
|
|
93
93
|
```ruby
|
94
94
|
class Person < Flexirest::Base
|
@@ -102,7 +102,7 @@ class Person < Flexirest::Base
|
|
102
102
|
if response.status == 401
|
103
103
|
# Do something to fix the state of caches/variables used in the
|
104
104
|
# before_request, etc
|
105
|
-
|
105
|
+
raise Flexirest::CallbackRetryRequestException.new
|
106
106
|
end
|
107
107
|
end
|
108
108
|
end
|
data/lib/flexirest/callbacks.rb
CHANGED
@@ -39,7 +39,7 @@ module Flexirest
|
|
39
39
|
return false
|
40
40
|
end
|
41
41
|
if result == :retry
|
42
|
-
|
42
|
+
raise Flexirest::CallbackRetryRequestException.new
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -66,4 +66,6 @@ module Flexirest
|
|
66
66
|
end
|
67
67
|
|
68
68
|
end
|
69
|
+
|
70
|
+
class CallbackRetryRequestException < Exception ; end
|
69
71
|
end
|
data/lib/flexirest/request.rb
CHANGED
@@ -239,13 +239,14 @@ module Flexirest
|
|
239
239
|
if object_is_class? && @object.record_response?
|
240
240
|
@object.record_response(self.url, response_env)
|
241
241
|
end
|
242
|
-
if object_is_class?
|
243
|
-
callback_result = @object.send(:_callback_request, :after, @method[:name], response_env)
|
244
|
-
else
|
245
|
-
callback_result = @object.class.send(:_callback_request, :after, @method[:name], response_env)
|
246
|
-
end
|
247
242
|
|
248
|
-
|
243
|
+
begin
|
244
|
+
if object_is_class?
|
245
|
+
callback_result = @object.send(:_callback_request, :after, @method[:name], response_env)
|
246
|
+
else
|
247
|
+
callback_result = @object.class.send(:_callback_request, :after, @method[:name], response_env)
|
248
|
+
end
|
249
|
+
rescue Flexirest::CallbackRetryRequestException
|
249
250
|
if self.retrying != true
|
250
251
|
self.retrying = true
|
251
252
|
return call()
|
data/lib/flexirest/version.rb
CHANGED
data/spec/lib/request_spec.rb
CHANGED
@@ -96,6 +96,11 @@ describe Flexirest::Request do
|
|
96
96
|
base_url "http://www.example.com"
|
97
97
|
|
98
98
|
after_request :handle_retries
|
99
|
+
after_request :inner_call
|
100
|
+
|
101
|
+
def self.reset_retries
|
102
|
+
@retries = 0
|
103
|
+
end
|
99
104
|
|
100
105
|
def self.incr_retries
|
101
106
|
@retries ||= 0
|
@@ -113,7 +118,17 @@ describe Flexirest::Request do
|
|
113
118
|
end
|
114
119
|
end
|
115
120
|
|
121
|
+
def inner_call(name, response)
|
122
|
+
if name == :first_call
|
123
|
+
self.class.incr_retries
|
124
|
+
self.second_call
|
125
|
+
raise Flexirest::CallbackRetryRequestException.new
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
116
129
|
get :do_me_twice, "/do_me_twice"
|
130
|
+
get :first_call, "/first_call"
|
131
|
+
get :second_call, "/second_call"
|
117
132
|
end
|
118
133
|
|
119
134
|
class LazyLoadedExampleClient < ExampleClient
|
@@ -908,10 +923,21 @@ describe Flexirest::Request do
|
|
908
923
|
it "should retry if an after_request callback returns :retry" do
|
909
924
|
stub_request(:get, "http://www.example.com/do_me_twice").
|
910
925
|
to_return(:status => 200, :body => "", :headers => {})
|
926
|
+
RetryingExampleClient.reset_retries
|
911
927
|
RetryingExampleClient.do_me_twice
|
912
928
|
expect(RetryingExampleClient.retries).to eq(2)
|
913
929
|
end
|
914
930
|
|
931
|
+
it "should allow a second call and then retry if an after_request callback returns :retry" do
|
932
|
+
stub_request(:get, "http://www.example.com/first_call").
|
933
|
+
to_return(:status => 200, :body => "", :headers => {})
|
934
|
+
stub_request(:get, "http://www.example.com/second_call").
|
935
|
+
to_return(:status => 200, :body => "", :headers => {})
|
936
|
+
RetryingExampleClient.reset_retries
|
937
|
+
RetryingExampleClient.first_call
|
938
|
+
expect(RetryingExampleClient.retries).to eq(2)
|
939
|
+
end
|
940
|
+
|
915
941
|
|
916
942
|
context "Direct URL requests" do
|
917
943
|
class SameServerExampleClient < Flexirest::Base
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flexirest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Jeffries
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|