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 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.