fetch 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +19 -1
- data/lib/fetch/base.rb +6 -1
- data/lib/fetch/version.rb +1 -1
- data/test/error_test.rb +84 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f7ab6433f70dc724bd8e7640a072ee3ca26555c
|
4
|
+
data.tar.gz: f25919595f00945f1bb6b1b41e40ca1940ac2421
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf303622302ebf70d0f071fc14d99f55dc8b748aae0789397c4afc09c76c1eb5a1c2c60332d28e742f6f9c504ff240d79415dc7122432c3f11d70b4497653e06
|
7
|
+
data.tar.gz: 41b866ef62c1d97f23b2f634b384898023aee0ee61f3caac231d4d11971e34b91b558b812bdf5564018a5dc7b8df75e4a2ab74cd741fc1a8701e9e34a1164c64
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -177,7 +177,7 @@ callback isn't called.
|
|
177
177
|
**Note:** If you don't specify a `failure` callback at all, HTTP failures are ignored,
|
178
178
|
and processing skipped for the failed request.
|
179
179
|
|
180
|
-
### Handling errors
|
180
|
+
### Handling fetch errors
|
181
181
|
|
182
182
|
Sometimes a URL will return something that potentially makes your processing
|
183
183
|
code fail. To prevent this from breaking your whole fetch, you can handle
|
@@ -223,6 +223,24 @@ isn't run.
|
|
223
223
|
above, any exceptions that occur when processing will be raised, causing the
|
224
224
|
whole fetch to fail. So please add error handling :blush:
|
225
225
|
|
226
|
+
### General error handling
|
227
|
+
|
228
|
+
You add a "catch all" `error` callback to your fetcher subclassed from
|
229
|
+
`Fetch::Base`. This enables you to handle any unhandled errors, including errors
|
230
|
+
in your fetcher callbacks.
|
231
|
+
|
232
|
+
```ruby
|
233
|
+
class UserFetcher < Fetch::Base
|
234
|
+
modules Facebook::UserInfoFetch,
|
235
|
+
Github::UserInfoFetch
|
236
|
+
|
237
|
+
error do |e|
|
238
|
+
# Do something that must be done,
|
239
|
+
# even if the fetch fails.
|
240
|
+
end
|
241
|
+
end
|
242
|
+
```
|
243
|
+
|
226
244
|
### Parsing JSON
|
227
245
|
|
228
246
|
Fetch has a module for automatically parsing the request body as JSON before
|
data/lib/fetch/base.rb
CHANGED
@@ -21,7 +21,8 @@ module Fetch
|
|
21
21
|
:init,
|
22
22
|
:before_fetch,
|
23
23
|
:after_fetch,
|
24
|
-
:progress
|
24
|
+
:progress,
|
25
|
+
:error
|
25
26
|
|
26
27
|
def initialize(fetchable = nil)
|
27
28
|
@fetchable = fetchable
|
@@ -45,6 +46,10 @@ module Fetch
|
|
45
46
|
after_fetch
|
46
47
|
|
47
48
|
true
|
49
|
+
rescue => e
|
50
|
+
raise e unless callback?(:error)
|
51
|
+
error(e)
|
52
|
+
false
|
48
53
|
end
|
49
54
|
|
50
55
|
private
|
data/lib/fetch/version.rb
CHANGED
data/test/error_test.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class ErrorTest < Minitest::Test
|
4
|
+
def test_error_callback_gets_run_for_unhandled_fetch_module_errors
|
5
|
+
actions = []
|
6
|
+
stub_request(:get, "http://test.com/one").to_return(body: "got one")
|
7
|
+
mod = Class.new(Fetch::Module) do
|
8
|
+
request do |req|
|
9
|
+
req.url = "http://test.com/one"
|
10
|
+
req.process do |body|
|
11
|
+
this_wont_work!
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
klass = Class.new(MockFetcher(mod)) do
|
16
|
+
error do |e|
|
17
|
+
actions << "got #{e.message}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
klass.new.fetch
|
21
|
+
assert_match /got undefined method `this_wont_work!'/, actions.first
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_exception_is_raised_if_no_error_callback_specified
|
25
|
+
stub_request(:get, "http://test.com/one").to_return(body: "got one")
|
26
|
+
mod = Class.new(Fetch::Module) do
|
27
|
+
request do |req|
|
28
|
+
req.url = "http://test.com/one"
|
29
|
+
req.process do |body|
|
30
|
+
this_wont_work!
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
assert_raises NoMethodError do
|
35
|
+
MockFetcher(mod).new.fetch
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
[:modules, :load, :init, :before_fetch, :after_fetch, :progress].each do |callback|
|
40
|
+
define_method "test_error_gets_run_when_#{callback}_callback_fails" do
|
41
|
+
actions = []
|
42
|
+
stub_request(:get, "http://test.com/one").to_return(body: "got one")
|
43
|
+
mod = Class.new(Fetch::Module) do
|
44
|
+
request do |req|
|
45
|
+
req.url = "http://test.com/one"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
klass = Class.new(MockFetcher(mod)) do
|
49
|
+
send(callback) do
|
50
|
+
send "this_#{callback}_fails!"
|
51
|
+
end
|
52
|
+
|
53
|
+
error do |e|
|
54
|
+
actions << "got #{e.message}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
klass.new.fetch
|
58
|
+
assert_match /got undefined method `this_#{callback}_fails!'/, actions.first
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_error_callback_doesnt_run_for_handled_fetch_module_errors
|
63
|
+
actions = []
|
64
|
+
stub_request(:get, "http://test.com/one").to_return(body: "got one")
|
65
|
+
mod = Class.new(Fetch::Module) do
|
66
|
+
request do |req|
|
67
|
+
req.url = "http://test.com/one"
|
68
|
+
req.process do |body|
|
69
|
+
this_wont_work!
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
error do |e|
|
74
|
+
end
|
75
|
+
end
|
76
|
+
klass = Class.new(MockFetcher(mod)) do
|
77
|
+
error do |e|
|
78
|
+
actions << "got #{e.message}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
klass.new.fetch
|
82
|
+
assert_equal [], actions
|
83
|
+
end
|
84
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fetch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lasse Bunk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- lib/fetch/version.rb
|
111
111
|
- test/callbacks_test.rb
|
112
112
|
- test/defaults_test.rb
|
113
|
+
- test/error_test.rb
|
113
114
|
- test/fetch_test.rb
|
114
115
|
- test/init_test.rb
|
115
116
|
- test/json_test.rb
|
@@ -144,6 +145,7 @@ summary: Coming
|
|
144
145
|
test_files:
|
145
146
|
- test/callbacks_test.rb
|
146
147
|
- test/defaults_test.rb
|
148
|
+
- test/error_test.rb
|
147
149
|
- test/fetch_test.rb
|
148
150
|
- test/init_test.rb
|
149
151
|
- test/json_test.rb
|