faraday_bang 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8c86ab07973616e783fc90b028611e2553f8d9cd
4
- data.tar.gz: c954035229658542ea9be28c378bac598a405704
3
+ metadata.gz: d081b24c1907767fd2b1f56b8e44c5e03b9fc849
4
+ data.tar.gz: 95067e15decc159c0723b21ccf420da2a08b24cb
5
5
  SHA512:
6
- metadata.gz: fbf870ac82be8668c9bd567385bc64c0ac77615017ecbdb48b0f07f7b0c756d7131bcfedac3d3095d19018dd473d66b7df3b7f19a8ae1fede9c83d5b56f50d45
7
- data.tar.gz: 090a6094059669e372f5e8672e8596ec0a1adc036d970f727432f4a669e0ee50c4a030cc739867033c2ed964df2733a6a961ce4ed26467a6f316a15b4a2232d0
6
+ metadata.gz: 3e4df43e55c679347aded6728de30ba4295321873363c09a5af8d4f1cfef28c9a1d2438a75dbfc0651e88df8c908ecbc9649eb22627e34103f3327eea342b247
7
+ data.tar.gz: 48053d8c8fbcaee0f351e8dab32433aec3d2b7c66d8bf30dbe2ab04de511865a0f2ba15a220a3f64862a8abe5ed8ba1fb0a42ca018f744cc2da148367e3c2835
@@ -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
- Faraday::Connection::METHODS.each do |verb|
5
- define_method("#{verb}!") do |*args|
6
- response = self.send(verb, *args)
7
- if response.status >= 400
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)
@@ -1,3 +1,3 @@
1
1
  module FaradayBang
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -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::Connection::METHODS.each do |verb|
12
+ Faraday::Bang::SUPPORTED_HTTP_METHODS.each do |verb|
12
13
 
13
- describe "##{verb}!" do
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
- let(:response) { mock(body: body, status: 200) }
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.0.0
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: 2014-04-18 00:00:00.000000000 Z
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.2.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.