flexirest 1.5.7 → 1.5.8
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/README.md +20 -0
- data/lib/flexirest/callbacks.rb +6 -3
- data/lib/flexirest/request.rb +10 -3
- data/lib/flexirest/version.rb +1 -1
- data/spec/lib/request_spec.rb +32 -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: 4a4a35ab648cec73d9c6681c296fce8059d39a44
|
4
|
+
data.tar.gz: b5f0ab3f9487c346565cd093993636c10e6f13f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 597d1639f2408ae3b5e05676d55ca8ef77a3e5082f62c9b0f11576537cd4314acd5d5cf21456620ede4da36fb8d64fe01040347ebf5e71f115af2909a88437bd
|
7
|
+
data.tar.gz: 6ae9f6fecd5e11adaa70608ce88e717d32aeab7c9d4730912de3f1d1694dd476999e854e657f783a39b877cd926d4ee7f9a51e2b87165c79dc45a2023a531621
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -566,6 +566,26 @@ end
|
|
566
566
|
|
567
567
|
**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.
|
568
568
|
|
569
|
+
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 returning `:retry` from the callback.
|
570
|
+
|
571
|
+
```ruby
|
572
|
+
class Person < Flexirest::Base
|
573
|
+
get :all, "/people"
|
574
|
+
|
575
|
+
after_request :fix_invalid_request
|
576
|
+
|
577
|
+
private
|
578
|
+
|
579
|
+
def fix_invalid_request(name, response)
|
580
|
+
if response.status == 401
|
581
|
+
# Do something to fix the state of caches/variables used in the
|
582
|
+
# before_request, etc
|
583
|
+
return :retry
|
584
|
+
end
|
585
|
+
end
|
586
|
+
end
|
587
|
+
```
|
588
|
+
|
569
589
|
### Lazy Loading
|
570
590
|
|
571
591
|
Flexirest supports lazy loading (delaying the actual API call until the response is actually used, so that views can be cached without still causing API calls).
|
data/lib/flexirest/callbacks.rb
CHANGED
@@ -27,13 +27,16 @@ module Flexirest
|
|
27
27
|
callbacks.each do |callback|
|
28
28
|
if callback.is_a? Symbol
|
29
29
|
if self.respond_to?(callback)
|
30
|
-
self.send(callback, name, param)
|
30
|
+
result = self.send(callback, name, param)
|
31
31
|
else
|
32
32
|
instance = self.new
|
33
|
-
instance.send(callback, name, param)
|
33
|
+
result = instance.send(callback, name, param)
|
34
34
|
end
|
35
35
|
else
|
36
|
-
callback.call(name, param)
|
36
|
+
result = callback.call(name, param)
|
37
|
+
end
|
38
|
+
if result == :retry
|
39
|
+
return :retry
|
37
40
|
end
|
38
41
|
end
|
39
42
|
end
|
data/lib/flexirest/request.rb
CHANGED
@@ -8,7 +8,7 @@ module Flexirest
|
|
8
8
|
class Request
|
9
9
|
include AttributeParsing
|
10
10
|
include JsonAPIProxy
|
11
|
-
attr_accessor :post_params, :get_params, :url, :path, :headers, :method, :object, :body, :forced_url, :original_url
|
11
|
+
attr_accessor :post_params, :get_params, :url, :path, :headers, :method, :object, :body, :forced_url, :original_url, :retrying
|
12
12
|
|
13
13
|
def initialize(method, object, params = {})
|
14
14
|
@method = method
|
@@ -211,9 +211,16 @@ module Flexirest
|
|
211
211
|
@object.record_response(self.url, response_env)
|
212
212
|
end
|
213
213
|
if object_is_class?
|
214
|
-
@object.send(:_callback_request, :after, @method[:name], response_env)
|
214
|
+
callback_result = @object.send(:_callback_request, :after, @method[:name], response_env)
|
215
215
|
else
|
216
|
-
@object.class.send(:_callback_request, :after, @method[:name], response_env)
|
216
|
+
callback_result = @object.class.send(:_callback_request, :after, @method[:name], response_env)
|
217
|
+
end
|
218
|
+
|
219
|
+
if callback_result == :retry
|
220
|
+
if self.retrying != true
|
221
|
+
self.retrying = true
|
222
|
+
return call()
|
223
|
+
end
|
217
224
|
end
|
218
225
|
|
219
226
|
result = handle_response(response_env, cached)
|
data/lib/flexirest/version.rb
CHANGED
data/spec/lib/request_spec.rb
CHANGED
@@ -71,6 +71,30 @@ describe Flexirest::Request do
|
|
71
71
|
end)
|
72
72
|
end
|
73
73
|
|
74
|
+
class RetryingExampleClient < Flexirest::Base
|
75
|
+
base_url "http://www.example.com"
|
76
|
+
|
77
|
+
after_request :handle_retries
|
78
|
+
|
79
|
+
def self.incr_retries
|
80
|
+
@retries ||= 0
|
81
|
+
@retries += 1
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.retries
|
85
|
+
@retries
|
86
|
+
end
|
87
|
+
|
88
|
+
def handle_retries(name, response)
|
89
|
+
if name == :do_me_twice
|
90
|
+
self.class.incr_retries
|
91
|
+
return :retry
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
get :do_me_twice, "/do_me_twice"
|
96
|
+
end
|
97
|
+
|
74
98
|
class LazyLoadedExampleClient < ExampleClient
|
75
99
|
base_url "http://www.example.com"
|
76
100
|
lazy_load!
|
@@ -803,6 +827,14 @@ describe Flexirest::Request do
|
|
803
827
|
expect(obj.test).to eq(1)
|
804
828
|
end
|
805
829
|
|
830
|
+
it "should retry if an after_request callback returns :retry" do
|
831
|
+
stub_request(:get, "http://www.example.com/do_me_twice").
|
832
|
+
to_return(:status => 200, :body => "", :headers => {})
|
833
|
+
RetryingExampleClient.do_me_twice
|
834
|
+
expect(RetryingExampleClient.retries).to eq(2)
|
835
|
+
end
|
836
|
+
|
837
|
+
|
806
838
|
context "Direct URL requests" do
|
807
839
|
class SameServerExampleClient < Flexirest::Base
|
808
840
|
URL = "http://www.example.com/some/url"
|
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.5.
|
4
|
+
version: 1.5.8
|
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-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|