faraday 0.17.1 → 0.17.3

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