flexirest 1.7.3 → 1.7.4
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.
- 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
|