faraday_bang 1.0.0 → 1.1.0
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/lib/faraday_bang/bang.rb +24 -13
- data/lib/faraday_bang/version.rb +1 -1
- data/test/lib/faraday_bang/bang_test.rb +57 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d081b24c1907767fd2b1f56b8e44c5e03b9fc849
|
4
|
+
data.tar.gz: 95067e15decc159c0723b21ccf420da2a08b24cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e4df43e55c679347aded6728de30ba4295321873363c09a5af8d4f1cfef28c9a1d2438a75dbfc0651e88df8c908ecbc9649eb22627e34103f3327eea342b247
|
7
|
+
data.tar.gz: 48053d8c8fbcaee0f351e8dab32433aec3d2b7c66d8bf30dbe2ab04de511865a0f2ba15a220a3f64862a8abe5ed8ba1fb0a42ca018f744cc2da148367e3c2835
|
data/lib/faraday_bang/bang.rb
CHANGED
@@ -1,22 +1,33 @@
|
|
1
1
|
module Faraday::Bang
|
2
2
|
ERROR_CODES = [(400..417).to_a, (500..505).to_a].flatten
|
3
|
+
SUPPORTED_HTTP_METHODS = Faraday::Connection::METHODS - [ :options ]
|
3
4
|
|
4
|
-
|
5
|
-
define_method("#{verb}!") do |*args|
|
6
|
-
response = self.send(verb, *args)
|
7
|
-
|
8
|
-
err_name = "Response#{response.status}Error"
|
9
|
-
if Faraday::Bang.const_defined?(err_name)
|
10
|
-
klass = Faraday::Bang.const_get(err_name)
|
11
|
-
raise klass.new(response)
|
12
|
-
else
|
13
|
-
raise Faraday::Bang::ResponseError.new(response)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
return response
|
5
|
+
SUPPORTED_HTTP_METHODS.each do |verb|
|
6
|
+
define_method("#{verb}!") do |*args, &block|
|
7
|
+
response = self.send(verb, *args, &block)
|
8
|
+
handle_response(response)
|
17
9
|
end
|
18
10
|
end
|
19
11
|
|
12
|
+
def options!(*args, &block)
|
13
|
+
url, body, headers = args
|
14
|
+
response = run_request(:options, url, body, headers, &block)
|
15
|
+
handle_response(response)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def handle_response(response)
|
20
|
+
if response.status >= 400
|
21
|
+
err_name = "Response#{response.status}Error"
|
22
|
+
if Faraday::Bang.const_defined?(err_name)
|
23
|
+
klass = Faraday::Bang.const_get(err_name)
|
24
|
+
raise klass.new(response)
|
25
|
+
else
|
26
|
+
raise Faraday::Bang::ResponseError.new(response)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
response
|
30
|
+
end
|
20
31
|
end
|
21
32
|
|
22
33
|
Faraday.extend(Faraday::Bang)
|
data/lib/faraday_bang/version.rb
CHANGED
@@ -7,12 +7,19 @@ describe Faraday::Bang do
|
|
7
7
|
let(:body) { {foo: 'bar'}.to_json }
|
8
8
|
|
9
9
|
[Faraday, Faraday.new].each do |klass|
|
10
|
+
let(:response) { mock(body: body, status: 200) }
|
10
11
|
|
11
|
-
Faraday::
|
12
|
+
Faraday::Bang::SUPPORTED_HTTP_METHODS.each do |verb|
|
12
13
|
|
13
|
-
|
14
|
+
it "##{verb}! passes a block" do
|
15
|
+
block = Proc.new do |req|
|
16
|
+
raise "dummy error #{verb}"
|
17
|
+
end
|
18
|
+
error = ->{ klass.send("#{verb}!", &block) }.must_raise RuntimeError
|
19
|
+
error.message.must_equal "dummy error #{verb}"
|
20
|
+
end
|
14
21
|
|
15
|
-
|
22
|
+
describe "##{verb}!" do
|
16
23
|
|
17
24
|
before do
|
18
25
|
klass.expects(verb).with(url, args).returns(response)
|
@@ -56,6 +63,53 @@ describe Faraday::Bang do
|
|
56
63
|
|
57
64
|
end
|
58
65
|
|
66
|
+
describe "options!" do
|
67
|
+
it "passes a block" do
|
68
|
+
block = Proc.new do |req|
|
69
|
+
raise "dummy error options"
|
70
|
+
end
|
71
|
+
error = ->{ klass.send("options!", &block) }.must_raise RuntimeError
|
72
|
+
error.message.must_equal "dummy error options"
|
73
|
+
end
|
74
|
+
|
75
|
+
describe 'successful response' do
|
76
|
+
before do
|
77
|
+
klass.expects(:run_request).with(:options, url, args, nil).returns(response)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'passes the call onto Faraday' do
|
81
|
+
res = klass.send("options!", url, args)
|
82
|
+
res.body.must_equal body
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe 'unsuccessful response' do
|
87
|
+
let(:env) { OpenStruct.new(url: 'http://example.com') }
|
88
|
+
let(:response) { OpenStruct.new(body: body, status: 506, env: env) }
|
89
|
+
|
90
|
+
before do
|
91
|
+
klass.expects(:run_request).with(:options, url, args, nil).returns(response)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'raises an error if its a non-200 response without an explicit exception' do
|
95
|
+
->{klass.send("options!", url, args)}.must_raise Faraday::Bang::ResponseError, body
|
96
|
+
end
|
97
|
+
|
98
|
+
Faraday::Bang::ERROR_CODES.each do |code|
|
99
|
+
|
100
|
+
context code do
|
101
|
+
|
102
|
+
let(:response) { OpenStruct.new(body: body, status: code, env: env) }
|
103
|
+
|
104
|
+
it "raises a Faraday::Bang::Response#{code}Error" do
|
105
|
+
->{klass.send("options!", url, args)}.must_raise Faraday::Bang.const_get("Response#{code}Error")
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
59
113
|
end
|
60
114
|
|
61
115
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday_bang
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Bates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
123
|
version: '0'
|
124
124
|
requirements: []
|
125
125
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.
|
126
|
+
rubygems_version: 2.4.5
|
127
127
|
signing_key:
|
128
128
|
specification_version: 4
|
129
129
|
summary: Adds error raising ! methods to Farday.
|