faraday 0.17.1 → 0.17.3

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
  SHA256:
3
- metadata.gz: 16a3bb1447dde55604486c5a3a912281318ca8d0a211008623bcafb270a104ea
4
- data.tar.gz: 966aaefe77900eab1bd1687bf7ce57950e0dbc8fb8dcd7a062fddf6be4393c4f
3
+ metadata.gz: cbaf8ddf8082d43401d642a52b6bc8514455824c90043970871e60b193375f2a
4
+ data.tar.gz: 89c3f88e540530a293a35839d67f761d1e3dca04266a8f1e4a5534e6e09a6a1b
5
5
  SHA512:
6
- metadata.gz: b016c9c3ea03bba4a9a40325f0494ef8a096e6c67d46ced7cb13da8e2bfeafca92107bc971f276ea883249219e13fa3f5f67e6c73d43c6ce66c6827108457e86
7
- data.tar.gz: 23e0a83830645895da998a9961d43747de7da1ee9428ea15a68776e1edb346f67c1b66d9403f3e4e0b5c40790e6adbf9bfa8dbb26db0cf79d4fafcb292c9e7ff
6
+ metadata.gz: 1523207ad94f95fae692736859cf36e17e0bf5cb14a95e8bfc01ad595833bacfc57bb3c95d87cd910c913ccb44aa94391fa6bfe762ebf1b7fe08aaf301ac62fa
7
+ data.tar.gz: 904372a2c809897cfadd6d856d98bf65396ce869124738f6693c28ebee7254b0792d027ad67bd59d660a0b71d93ac09db73f640da3cee8e479eb81b9458a6fd1
@@ -1,5 +1,21 @@
1
1
  # Faraday Changelog
2
2
 
3
+ ## v0.17.3
4
+
5
+ Fixes:
6
+
7
+ * Reverts changes in error classes hierarchy. #1092 (@iMacTia)
8
+ * Fix Ruby 1.9 syntax errors and improve Error class testing #1094 (@BanzaiMan,
9
+ @mrexox, @technoweenie)
10
+
11
+ Misc:
12
+
13
+ * Stops using `&Proc.new` for block forwarding. #1083 (@olleolleolle)
14
+ * Update CI to test against ruby 2.0-2.7 #1087, #1099 (@iMacTia, @olleolleolle,
15
+ @technoweenie)
16
+ * require FARADAY_DEPRECATE=warn to show Faraday v1.0 deprecation warnings
17
+ #1098 (@technoweenie)
18
+
3
19
  ## v0.17.1
4
20
 
5
21
  Final release before Faraday v1.0, with important fixes for Ruby 2.7.
@@ -7,7 +23,7 @@ Final release before Faraday v1.0, with important fixes for Ruby 2.7.
7
23
  Fixes:
8
24
 
9
25
  * RaiseError response middleware raises exception if HTTP client returns a nil
10
- status. (#1042)
26
+ status. #1042 (@jonnyom, @BobbyMcWho)
11
27
 
12
28
  Misc:
13
29
 
data/README.md CHANGED
@@ -31,6 +31,17 @@ Rack::Test, and a Test adapter for stubbing requests by hand.
31
31
 
32
32
  Available at [rubydoc.info](http://www.rubydoc.info/gems/faraday).
33
33
 
34
+ ## Faraday 1.0
35
+
36
+ Faraday 1.0 will ship soon! Faraday 0.17 will be the last 0.x release, except for serious bugs or security issues.
37
+ Faraday 1.0 is a major release, but it will be mostly backwards-compatible with 0.x, so we strongly encourage you
38
+ to use it on your next projects and/or consider to upgrade your existing ones.
39
+ Upgrading is simple:
40
+
41
+ * Checkout the new code from [`master`](https://github.com/lostisland/faraday) and the new [Documentation Website](https://lostisland.github.io/faraday/).
42
+ * If you're upgrading an existing project, check the [UPGRADING](https://github.com/lostisland/faraday/blob/master/UPGRADING.md) file.
43
+ * You can also enable upgrade warnings on apps with Faraday 0.x if you run them with `FARADAY_DEPRECATE=warn` or `FARADAY_DEPRECATE=1` in ENV.
44
+
34
45
  ## Usage
35
46
 
36
47
  ### Basic Use
@@ -14,7 +14,7 @@ require 'forwardable'
14
14
  # conn.get '/'
15
15
  #
16
16
  module Faraday
17
- VERSION = "0.17.1"
17
+ VERSION = "0.17.3"
18
18
 
19
19
  class << self
20
20
  # Public: Gets or sets the root path that Faraday is being loaded from.
@@ -64,8 +64,7 @@ module Faraday
64
64
  # :params => {:page => 1}
65
65
  #
66
66
  # Returns a Faraday::Connection.
67
- def new(url = nil, options = nil)
68
- block = block_given? ? Proc.new : nil
67
+ def new(url = nil, options = nil, &block)
69
68
  options = options ? default_connection_options.merge(options) : default_connection_options
70
69
  Faraday::Connection.new(url, options, &block)
71
70
  end
@@ -10,7 +10,7 @@ module Faraday
10
10
  if Net::HTTP::Persistent.instance_method(:initialize).parameters.first == [:key, :name]
11
11
  options = {name: 'Faraday'}
12
12
  options[:pool_size] = @connection_options[:pool_size] if @connection_options.key?(:pool_size)
13
- Net::HTTP::Persistent.new(options)
13
+ Net::HTTP::Persistent.new(**options)
14
14
  else
15
15
  Net::HTTP::Persistent.new('Faraday')
16
16
  end
@@ -46,11 +46,17 @@ module Faraday
46
46
  # end
47
47
  module Deprecate
48
48
  def self.skip # :nodoc:
49
- @skip ||= false
49
+ @skip ||= begin
50
+ case ENV['FARADAY_DEPRECATE'].to_s.downcase
51
+ when '1', 'warn' then :warn
52
+ else :skip
53
+ end
54
+ end
55
+ @skip == :skip
50
56
  end
51
57
 
52
58
  def self.skip=(value) # :nodoc:
53
- @skip = value
59
+ @skip = value ? :skip : :warn
54
60
  end
55
61
 
56
62
  # Temporarily turn off warnings. Intended for tests only.
@@ -9,18 +9,9 @@ module Faraday
9
9
  attr_reader :response, :wrapped_exception
10
10
 
11
11
  def initialize(exc, response = nil)
12
- @wrapped_exception = nil
13
- @response = response
14
-
15
- if exc.respond_to?(:backtrace)
16
- super(exc.message)
17
- @wrapped_exception = exc
18
- elsif exc.respond_to?(:each_key)
19
- super("the server responded with status #{exc[:status]}")
20
- @response = exc
21
- else
22
- super(exc.to_s)
23
- end
12
+ @wrapped_exception = nil unless defined?(@wrapped_exception)
13
+ @response = nil unless defined?(@response)
14
+ super(exc_msg_and_response!(exc, response))
24
15
  end
25
16
 
26
17
  def backtrace
@@ -32,12 +23,44 @@ module Faraday
32
23
  end
33
24
 
34
25
  def inspect
35
- inner = +''
36
- inner << " wrapped=#{@wrapped_exception.inspect}" if @wrapped_exception
37
- inner << " response=#{@response.inspect}" if @response
38
- inner << " #{super}" if inner.empty?
26
+ inner = ''
27
+ inner += " wrapped=#{@wrapped_exception.inspect}" if @wrapped_exception
28
+ inner += " response=#{@response.inspect}" if @response
29
+ inner += " #{super}" if inner.empty?
39
30
  %(#<#{self.class}#{inner}>)
40
31
  end
32
+
33
+ protected
34
+
35
+ # Pulls out potential parent exception and response hash, storing them in
36
+ # instance variables.
37
+ # exc - Either an Exception, a string message, or a response hash.
38
+ # response - Hash
39
+ # :status - Optional integer HTTP response status
40
+ # :headers - String key/value hash of HTTP response header
41
+ # values.
42
+ # :body - Optional string HTTP response body.
43
+ #
44
+ # If a subclass has to call this, then it should pass a string message
45
+ # to `super`. See NilStatusError.
46
+ def exc_msg_and_response!(exc, response = nil)
47
+ if @response.nil? && @wrapped_exception.nil?
48
+ @wrapped_exception, msg, @response = exc_msg_and_response(exc, response)
49
+ return msg
50
+ end
51
+
52
+ exc.to_s
53
+ end
54
+
55
+ # Pulls out potential parent exception and response hash.
56
+ def exc_msg_and_response(exc, response = nil)
57
+ return [exc, exc.message, response] if exc.respond_to?(:backtrace)
58
+
59
+ return [nil, "the server responded with status #{exc[:status]}", exc] \
60
+ if exc.respond_to?(:each_key)
61
+
62
+ [nil, exc.to_s, response]
63
+ end
41
64
  end
42
65
 
43
66
  # Faraday client error class. Represents 4xx status responses.
@@ -77,7 +100,7 @@ module Faraday
77
100
  end
78
101
 
79
102
  # A unified client error for timeouts.
80
- class TimeoutError < ServerError
103
+ class TimeoutError < ClientError
81
104
  def initialize(exc = 'timeout', response = nil)
82
105
  super(exc, response)
83
106
  end
@@ -85,32 +108,48 @@ module Faraday
85
108
 
86
109
  # Raised by Faraday::Response::RaiseError in case of a nil status in response.
87
110
  class NilStatusError < ServerError
88
- def initialize(_exc, response: nil)
89
- message = 'http status could not be derived from the server response'
90
- super(message, response)
111
+ def initialize(exc, response = nil)
112
+ exc_msg_and_response!(exc, response)
113
+ @response = unwrap_resp!(@response)
114
+ super('http status could not be derived from the server response')
91
115
  end
116
+
117
+ private
118
+
119
+ extend Faraday::Deprecate
120
+
121
+ def unwrap_resp(resp)
122
+ if inner = (resp.keys.size == 1 && resp[:response])
123
+ return unwrap_resp(inner)
124
+ end
125
+
126
+ resp
127
+ end
128
+
129
+ alias_method :unwrap_resp!, :unwrap_resp
130
+ deprecate('unwrap_resp', nil, '1.0')
92
131
  end
93
132
 
94
133
  # A unified error for failed connections.
95
- class ConnectionFailed < Error
134
+ class ConnectionFailed < ClientError
96
135
  end
97
136
 
98
137
  # A unified client error for SSL errors.
99
- class SSLError < Error
138
+ class SSLError < ClientError
100
139
  end
101
140
 
102
141
  # Raised by FaradayMiddleware::ResponseMiddleware
103
- class ParsingError < Error
142
+ class ParsingError < ClientError
104
143
  end
105
144
 
106
145
  # Exception used to control the Retry middleware.
107
146
  #
108
147
  # @see Faraday::Request::Retry
109
- class RetriableResponse < Error
148
+ class RetriableResponse < ClientError
110
149
  end
111
150
 
112
- %i[ClientError ConnectionFailed ResourceNotFound
113
- ParsingError TimeoutError SSLError RetriableResponse].each do |const|
151
+ [:ClientError, :ConnectionFailed, :ResourceNotFound,
152
+ :ParsingError, :TimeoutError, :SSLError, :RetriableResponse].each do |const|
114
153
  Error.const_set(
115
154
  const,
116
155
  DeprecatedClass.proxy_class(Faraday.const_get(const))
@@ -162,8 +162,8 @@ module Faraday
162
162
  @attribute_options ||= {}
163
163
  end
164
164
 
165
- def self.memoized(key)
166
- memoized_attributes[key.to_sym] = Proc.new
165
+ def self.memoized(key, &block)
166
+ memoized_attributes[key.to_sym] = block
167
167
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
168
168
  def #{key}() self[:#{key}]; end
169
169
  RUBY
@@ -49,10 +49,10 @@ module Faraday
49
49
  end
50
50
  end
51
51
 
52
- def initialize(handlers = [])
52
+ def initialize(handlers = [], &block)
53
53
  @handlers = handlers
54
54
  if block_given?
55
- build(&Proc.new)
55
+ build(&block)
56
56
  elsif @handlers.empty?
57
57
  # default stack, if nothing else is configured
58
58
  self.request :url_encoded
@@ -14,7 +14,7 @@ module Faraday
14
14
  when ClientErrorStatuses
15
15
  raise Faraday::ClientError, response_values(env)
16
16
  when nil
17
- raise Faraday::NilStatusError, response: response_values(env)
17
+ raise Faraday::NilStatusError, response_values(env)
18
18
  end
19
19
  end
20
20
 
@@ -14,7 +14,7 @@ RSpec.describe Faraday::Response::RaiseError do
14
14
  stub.get('conflict') { [409, { 'X-Reason' => 'because' }, 'keep looking'] }
15
15
  stub.get('unprocessable-entity') { [422, { 'X-Reason' => 'because' }, 'keep looking'] }
16
16
  stub.get('4xx') { [499, { 'X-Reason' => 'because' }, 'keep looking'] }
17
- stub.get('nil-status') { [nil, { 'X-Reason' => 'bailout' }, 'fail'] }
17
+ stub.get('nil-status') { [nil, { 'X-Reason' => 'nil' }, 'fail'] }
18
18
  stub.get('server-error') { [500, { 'X-Error' => 'bailout' }, 'fail'] }
19
19
  end
20
20
  end
@@ -28,6 +28,7 @@ RSpec.describe Faraday::Response::RaiseError do
28
28
  expect { conn.get('bad-request') }.to raise_error(Faraday::ClientError) do |ex|
29
29
  expect(ex.message).to eq('the server responded with status 400')
30
30
  expect(ex.response[:headers]['X-Reason']).to eq('because')
31
+ expect(ex.response[:status]).to eq(400)
31
32
  end
32
33
  end
33
34
 
@@ -35,6 +36,7 @@ RSpec.describe Faraday::Response::RaiseError do
35
36
  expect { conn.get('unauthorized') }.to raise_error(Faraday::ClientError) do |ex|
36
37
  expect(ex.message).to eq('the server responded with status 401')
37
38
  expect(ex.response[:headers]['X-Reason']).to eq('because')
39
+ expect(ex.response[:status]).to eq(401)
38
40
  end
39
41
  end
40
42
 
@@ -42,6 +44,7 @@ RSpec.describe Faraday::Response::RaiseError do
42
44
  expect { conn.get('forbidden') }.to raise_error(Faraday::ClientError) do |ex|
43
45
  expect(ex.message).to eq('the server responded with status 403')
44
46
  expect(ex.response[:headers]['X-Reason']).to eq('because')
47
+ expect(ex.response[:status]).to eq(403)
45
48
  end
46
49
  end
47
50
 
@@ -49,6 +52,7 @@ RSpec.describe Faraday::Response::RaiseError do
49
52
  expect { conn.get('not-found') }.to raise_error(Faraday::ResourceNotFound) do |ex|
50
53
  expect(ex.message).to eq('the server responded with status 404')
51
54
  expect(ex.response[:headers]['X-Reason']).to eq('because')
55
+ expect(ex.response[:status]).to eq(404)
52
56
  end
53
57
  end
54
58
 
@@ -56,6 +60,7 @@ RSpec.describe Faraday::Response::RaiseError do
56
60
  expect { conn.get('proxy-error') }.to raise_error(Faraday::ConnectionFailed) do |ex|
57
61
  expect(ex.message).to eq('407 "Proxy Authentication Required "')
58
62
  expect(ex.response[:headers]['X-Reason']).to eq('because')
63
+ expect(ex.response[:status]).to eq(407)
59
64
  end
60
65
  end
61
66
 
@@ -63,6 +68,7 @@ RSpec.describe Faraday::Response::RaiseError do
63
68
  expect { conn.get('conflict') }.to raise_error(Faraday::ClientError) do |ex|
64
69
  expect(ex.message).to eq('the server responded with status 409')
65
70
  expect(ex.response[:headers]['X-Reason']).to eq('because')
71
+ expect(ex.response[:status]).to eq(409)
66
72
  end
67
73
  end
68
74
 
@@ -70,12 +76,15 @@ RSpec.describe Faraday::Response::RaiseError do
70
76
  expect { conn.get('unprocessable-entity') }.to raise_error(Faraday::ClientError) do |ex|
71
77
  expect(ex.message).to eq('the server responded with status 422')
72
78
  expect(ex.response[:headers]['X-Reason']).to eq('because')
79
+ expect(ex.response[:status]).to eq(422)
73
80
  end
74
81
  end
75
82
 
76
83
  it 'raises Faraday::NilStatusError for nil status in response' do
77
84
  expect { conn.get('nil-status') }.to raise_error(Faraday::NilStatusError) do |ex|
78
85
  expect(ex.message).to eq('http status could not be derived from the server response')
86
+ expect(ex.response[:headers]['X-Reason']).to eq('nil')
87
+ expect(ex.response[:status]).to be_nil
79
88
  end
80
89
  end
81
90
 
@@ -83,6 +92,7 @@ RSpec.describe Faraday::Response::RaiseError do
83
92
  expect { conn.get('4xx') }.to raise_error(Faraday::ClientError) do |ex|
84
93
  expect(ex.message).to eq('the server responded with status 499')
85
94
  expect(ex.response[:headers]['X-Reason']).to eq('because')
95
+ expect(ex.response[:status]).to eq(499)
86
96
  end
87
97
  end
88
98
 
@@ -90,6 +100,7 @@ RSpec.describe Faraday::Response::RaiseError do
90
100
  expect { conn.get('server-error') }.to raise_error(Faraday::ClientError) do |ex|
91
101
  expect(ex.message).to eq('the server responded with status 500')
92
102
  expect(ex.response[:headers]['X-Error']).to eq('bailout')
103
+ expect(ex.response[:status]).to eq(500)
93
104
  end
94
105
  end
95
106
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'faraday'
4
+ Faraday::Deprecate.skip = false
4
5
 
5
6
  # This file was generated by the `rspec --init` command. Conventionally, all
6
7
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.1
4
+ version: 0.17.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - "@technoweenie"
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-11-27 00:00:00.000000000 Z
13
+ date: 2019-12-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: multipart-post
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  - !ruby/object:Gem::Version
134
134
  version: '0'
135
135
  requirements: []
136
- rubygems_version: 3.0.3
136
+ rubygems_version: 3.1.2
137
137
  signing_key:
138
138
  specification_version: 4
139
139
  summary: HTTP/REST API client library.