flexirest 1.5.7 → 1.5.8
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/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
|