faraday 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/faraday.rb +2 -2
- data/lib/faraday/adapter/em_http.rb +2 -1
- data/lib/faraday/adapter/httpclient.rb +2 -1
- data/lib/faraday/adapter/net_http.rb +18 -8
- data/lib/faraday/adapter/typhoeus.rb +1 -1
- data/lib/faraday/adapter_registry.rb +3 -1
- data/lib/faraday/request/authorization.rb +3 -1
- data/lib/faraday/request/multipart.rb +1 -1
- data/lib/faraday/request/url_encoded.rb +3 -1
- data/lib/faraday/response.rb +4 -1
- data/lib/faraday/utils.rb +9 -1
- data/spec/faraday/adapter/em_http_spec.rb +1 -1
- data/spec/faraday/adapter/em_synchrony_spec.rb +1 -1
- data/spec/faraday/adapter/patron_spec.rb +1 -1
- data/spec/faraday/rack_builder_spec.rb +1 -1
- data/spec/faraday/request/url_encoded_spec.rb +13 -0
- data/spec/faraday/response/middleware_spec.rb +16 -0
- metadata +5 -5
- data/UPGRADING.md +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d23ec0aefc40d23ccc4410db08092bd29e477309fb8aa6794b3c8401961de10
|
4
|
+
data.tar.gz: c33ca7313dcccbf148266a80aa4e12d4cba96a4feb96ecfc3e8ff50fa06756c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8058c22dc6e78bc3d46a9c8a22c458656a1380a4aed62b31e11b9b054fc6791373dd103276fc018148daed3934a724bcb39390bbe88e2762281ff810b61b408d
|
7
|
+
data.tar.gz: 341f3b44148f666bb03f8e7b232fd92e26b8c34d758090e6e82f1276af29ff17d4f62bdb58871254ba48b2232ab58269c71db08df7a4b0c35c53f2c7e9bbe7e8
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# ![Faraday](./docs/assets/img/repo-card-slim.png)
|
1
|
+
# [![Faraday](./docs/assets/img/repo-card-slim.png)][website]
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/faraday.svg)](https://rubygems.org/gems/faraday)
|
4
4
|
![GitHub Actions CI](https://github.com/lostisland/faraday/workflows/CI/badge.svg)
|
data/lib/faraday.rb
CHANGED
@@ -19,7 +19,7 @@ require 'faraday/dependency_loader'
|
|
19
19
|
# conn.get '/'
|
20
20
|
#
|
21
21
|
module Faraday
|
22
|
-
VERSION = '1.0.
|
22
|
+
VERSION = '1.0.1'
|
23
23
|
METHODS_WITH_QUERY = %w[get head delete trace].freeze
|
24
24
|
METHODS_WITH_BODY = %w[post put patch].freeze
|
25
25
|
|
@@ -153,7 +153,7 @@ module Faraday
|
|
153
153
|
@default_connection_options = ConnectionOptions.from(options)
|
154
154
|
end
|
155
155
|
|
156
|
-
unless
|
156
|
+
unless defined?(::Faraday::Timer)
|
157
157
|
require 'timeout'
|
158
158
|
Timer = Timeout
|
159
159
|
end
|
@@ -142,7 +142,8 @@ module Faraday
|
|
142
142
|
|
143
143
|
raise Faraday::ConnectionFailed, e
|
144
144
|
rescue StandardError => e
|
145
|
-
if defined?(OpenSSL
|
145
|
+
if defined?(::OpenSSL::SSL::SSLError) && \
|
146
|
+
e.is_a?(::OpenSSL::SSL::SSLError)
|
146
147
|
raise Faraday::SSLError, e
|
147
148
|
end
|
148
149
|
|
@@ -66,7 +66,8 @@ module Faraday
|
|
66
66
|
rescue Errno::EADDRNOTAVAIL, Errno::ECONNREFUSED, IOError, SocketError
|
67
67
|
raise Faraday::ConnectionFailed, $ERROR_INFO
|
68
68
|
rescue StandardError => e
|
69
|
-
if defined?(OpenSSL
|
69
|
+
if defined?(::OpenSSL::SSL::SSLError) && \
|
70
|
+
e.is_a?(::OpenSSL::SSL::SSLError)
|
70
71
|
raise Faraday::SSLError, e
|
71
72
|
end
|
72
73
|
|
@@ -30,8 +30,10 @@ module Faraday
|
|
30
30
|
Zlib::GzipFile::Error
|
31
31
|
]
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
if defined?(::OpenSSL::SSL::SSLError)
|
34
|
+
exceptions << ::OpenSSL::SSL::SSLError
|
35
|
+
end
|
36
|
+
exceptions << ::Net::OpenTimeout if defined?(::Net::OpenTimeout)
|
35
37
|
|
36
38
|
NET_HTTP_EXCEPTIONS = exceptions.freeze
|
37
39
|
|
@@ -137,16 +139,24 @@ module Faraday
|
|
137
139
|
end
|
138
140
|
|
139
141
|
def request_via_get_method(http, env, &block)
|
140
|
-
|
142
|
+
# Must use Net::HTTP#start and pass it a block otherwise the server's
|
143
|
+
# TCP socket does not close correctly.
|
144
|
+
http.start do |opened_http|
|
145
|
+
opened_http.get env[:url].request_uri, env[:request_headers], &block
|
146
|
+
end
|
141
147
|
end
|
142
148
|
|
143
149
|
def request_via_request_method(http, env, &block)
|
144
|
-
|
145
|
-
|
146
|
-
|
150
|
+
# Must use Net::HTTP#start and pass it a block otherwise the server's
|
151
|
+
# TCP socket does not close correctly.
|
152
|
+
http.start do |opened_http|
|
153
|
+
if block_given?
|
154
|
+
opened_http.request create_request(env) do |response|
|
155
|
+
response.read_body(&block)
|
156
|
+
end
|
157
|
+
else
|
158
|
+
opened_http.request create_request(env)
|
147
159
|
end
|
148
|
-
else
|
149
|
-
http.request create_request(env)
|
150
160
|
end
|
151
161
|
end
|
152
162
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Faraday
|
4
4
|
class Adapter
|
5
5
|
# Typhoeus adapter. This class is just a stub, the real adapter is in
|
6
|
-
# https://github.com/
|
6
|
+
# https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/adapters/faraday.rb
|
7
7
|
class Typhoeus < Faraday::Adapter
|
8
8
|
# Needs to define this method in order to support Typhoeus <= 1.3.0
|
9
9
|
def call; end
|
@@ -4,7 +4,9 @@ module Faraday
|
|
4
4
|
class Request
|
5
5
|
# Request middleware for the Authorization HTTP header
|
6
6
|
class Authorization < Faraday::Middleware
|
7
|
-
|
7
|
+
unless defined?(::Faraday::Request::Authorization::KEY)
|
8
|
+
KEY = 'Authorization'
|
9
|
+
end
|
8
10
|
|
9
11
|
# @param type [String, Symbol]
|
10
12
|
# @param token [String, Symbol, Hash]
|
@@ -8,7 +8,7 @@ module Faraday
|
|
8
8
|
# Middleware for supporting multi-part requests.
|
9
9
|
class Multipart < UrlEncoded
|
10
10
|
self.mime_type = 'multipart/form-data'
|
11
|
-
unless defined?
|
11
|
+
unless defined?(::Faraday::Request::Multipart::DEFAULT_BOUNDARY_PREFIX)
|
12
12
|
DEFAULT_BOUNDARY_PREFIX = '-----------RubyMultipartPost'
|
13
13
|
end
|
14
14
|
|
@@ -4,7 +4,9 @@ module Faraday
|
|
4
4
|
class Request
|
5
5
|
# Middleware for supporting urlencoded requests.
|
6
6
|
class UrlEncoded < Faraday::Middleware
|
7
|
-
|
7
|
+
unless defined?(::Faraday::Request::UrlEncoded::CONTENT_TYPE)
|
8
|
+
CONTENT_TYPE = 'Content-Type'
|
9
|
+
end
|
8
10
|
|
9
11
|
class << self
|
10
12
|
attr_accessor :mime_type
|
data/lib/faraday/response.rb
CHANGED
@@ -15,8 +15,11 @@ module Faraday
|
|
15
15
|
|
16
16
|
# Override this to modify the environment after the response has finished.
|
17
17
|
# Calls the `parse` method if defined
|
18
|
+
# `parse` method can be defined as private, public and protected
|
18
19
|
def on_complete(env)
|
19
|
-
|
20
|
+
return unless respond_to?(:parse, true) && env.parse_body?
|
21
|
+
|
22
|
+
env.body = parse(env.body)
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
data/lib/faraday/utils.rb
CHANGED
@@ -16,12 +16,20 @@ module Faraday
|
|
16
16
|
NestedParamsEncoder.encode(params)
|
17
17
|
end
|
18
18
|
|
19
|
+
def default_space_encoding
|
20
|
+
@default_space_encoding ||= '+'
|
21
|
+
end
|
22
|
+
|
23
|
+
class << self
|
24
|
+
attr_writer :default_space_encoding
|
25
|
+
end
|
26
|
+
|
19
27
|
ESCAPE_RE = /[^a-zA-Z0-9 .~_-]/.freeze
|
20
28
|
|
21
29
|
def escape(str)
|
22
30
|
str.to_s.gsub(ESCAPE_RE) do |match|
|
23
31
|
'%' + match.unpack('H2' * match.bytesize).join('%').upcase
|
24
|
-
end.
|
32
|
+
end.gsub(' ', default_space_encoding)
|
25
33
|
end
|
26
34
|
|
27
35
|
def unescape(str)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.describe Faraday::Adapter::EMHttp do
|
3
|
+
RSpec.describe Faraday::Adapter::EMHttp, unless: defined?(JRUBY_VERSION) do
|
4
4
|
features :request_body_on_query_methods, :reason_phrase_parse, :trace_method,
|
5
5
|
:skip_response_body_on_head, :parallel, :local_socket_binding
|
6
6
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.describe Faraday::Adapter::EMSynchrony do
|
3
|
+
RSpec.describe Faraday::Adapter::EMSynchrony, unless: defined?(JRUBY_VERSION) do
|
4
4
|
features :request_body_on_query_methods, :reason_phrase_parse,
|
5
5
|
:skip_response_body_on_head, :parallel, :local_socket_binding
|
6
6
|
|
@@ -189,7 +189,7 @@ RSpec.describe Faraday::RackBuilder do
|
|
189
189
|
|
190
190
|
it 'raises an error while making a request' do
|
191
191
|
expect { conn.get('/') }.to raise_error(RuntimeError) do |err|
|
192
|
-
expect(err.message).to
|
192
|
+
expect(err.message).to match(%r{missing dependency for Broken: .+ -- zomg/i_dont/exist})
|
193
193
|
end
|
194
194
|
end
|
195
195
|
end
|
@@ -67,4 +67,17 @@ RSpec.describe Faraday::Request::UrlEncoded do
|
|
67
67
|
response = conn.post('/echo', 'a' => { 'b' => { 'c' => ['d'] } })
|
68
68
|
expect(response.body).to eq('a%5Bb%5D%5Bc%5D%5B%5D=d')
|
69
69
|
end
|
70
|
+
|
71
|
+
context 'customising default_space_encoding' do
|
72
|
+
around do |example|
|
73
|
+
Faraday::Utils.default_space_encoding = '%20'
|
74
|
+
example.run
|
75
|
+
Faraday::Utils.default_space_encoding = nil
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'uses the custom character to encode spaces' do
|
79
|
+
response = conn.post('/echo', str: 'apple banana')
|
80
|
+
expect(response.body).to eq('str=apple%20banana')
|
81
|
+
end
|
82
|
+
end
|
70
83
|
end
|
@@ -26,6 +26,22 @@ RSpec.describe Faraday::Response::Middleware do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
context 'with a custom ResponseMiddleware and private parse' do
|
30
|
+
let(:custom_middleware) do
|
31
|
+
Class.new(Faraday::Response::Middleware) do
|
32
|
+
private
|
33
|
+
|
34
|
+
def parse(body)
|
35
|
+
body.upcase
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'parses the response' do
|
41
|
+
expect(conn.get('ok').body).to eq('<BODY></BODY>')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
29
45
|
context 'with a custom ResponseMiddleware but empty response' do
|
30
46
|
let(:custom_middleware) do
|
31
47
|
Class.new(Faraday::Response::Middleware) do
|
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: 1.0.
|
4
|
+
version: 1.0.1
|
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: 2020-
|
13
|
+
date: 2020-03-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: multipart-post
|
@@ -42,7 +42,6 @@ files:
|
|
42
42
|
- LICENSE.md
|
43
43
|
- README.md
|
44
44
|
- Rakefile
|
45
|
-
- UPGRADING.md
|
46
45
|
- examples/client_spec.rb
|
47
46
|
- examples/client_test.rb
|
48
47
|
- lib/faraday.rb
|
@@ -143,13 +142,14 @@ licenses:
|
|
143
142
|
- MIT
|
144
143
|
metadata:
|
145
144
|
homepage_uri: https://lostisland.github.io/faraday
|
146
|
-
changelog_uri: https://github.com/lostisland/faraday/releases/tag/v1.0.
|
145
|
+
changelog_uri: https://github.com/lostisland/faraday/releases/tag/v1.0.1
|
147
146
|
source_code_uri: https://github.com/lostisland/faraday
|
148
147
|
bug_tracker_uri: https://github.com/lostisland/faraday/issues
|
149
148
|
post_install_message:
|
150
149
|
rdoc_options: []
|
151
150
|
require_paths:
|
152
151
|
- lib
|
152
|
+
- spec/external_adapters
|
153
153
|
required_ruby_version: !ruby/object:Gem::Requirement
|
154
154
|
requirements:
|
155
155
|
- - ">="
|
@@ -161,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
161
|
- !ruby/object:Gem::Version
|
162
162
|
version: '0'
|
163
163
|
requirements: []
|
164
|
-
rubygems_version: 3.
|
164
|
+
rubygems_version: 3.0.3
|
165
165
|
signing_key:
|
166
166
|
specification_version: 4
|
167
167
|
summary: HTTP/REST API client library.
|
data/UPGRADING.md
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
## Faraday 1.0
|
2
|
-
|
3
|
-
### Errors
|
4
|
-
* Removes sub-class constants definition from `Faraday::Error`. A sub-class (e.g. `ClientError`) was previously accessible
|
5
|
-
either through the `Faraday` module (e.g. `Faraday::ClientError`) or through the `Faraday::Error` class (e.g. `Faraday::Error::ClientError`).
|
6
|
-
The latter is no longer available and the former should be used instead, so check your `rescue`s.
|
7
|
-
* Introduces a new `Faraday::ServerError` (5xx status codes) alongside the existing `Faraday::ClientError` (4xx status codes).
|
8
|
-
Please note `Faraday::ClientError` was previously used for both.
|
9
|
-
* Introduces new Errors that describe the most common REST status codes:
|
10
|
-
* Faraday::BadRequestError (400)
|
11
|
-
* Faraday::UnauthorizedError (401)
|
12
|
-
* Faraday::ForbiddenError (403)
|
13
|
-
* Faraday::ProxyAuthError (407). Please note this raised a `Faraday::ConnectionFailed` before.
|
14
|
-
* Faraday::ConflictError (409)
|
15
|
-
* Faraday::UnprocessableEntityError (422)
|
16
|
-
* The following error classes have changed the hierarchy to better mirror their real-world usage and semantic meaning:
|
17
|
-
* TimeoutError < ServerError (was < ClientError)
|
18
|
-
* ConnectionFailed < Error (was < ClientError)
|
19
|
-
* SSLError < Error (was < ClientError)
|
20
|
-
* ParsingError < Error (was < ClientError)
|
21
|
-
* RetriableResponse < Error (was < ClientError)
|
22
|
-
|
23
|
-
### Custom adapters
|
24
|
-
If you have written a custom adapter, please be aware that `env.body` is now an alias to the two new properties `request_body` and `response_body`.
|
25
|
-
This should work without you noticing if your adapter inherits from `Faraday::Adapter` and calls `save_response`, but if it doesn't, then please ensure you set the `status` BEFORE the `body` while processing the response.
|
26
|
-
|
27
|
-
### Others
|
28
|
-
* Dropped support for jruby and Rubinius.
|
29
|
-
* Officially supports Ruby 2.4+
|
30
|
-
* In order to specify the adapter you now MUST use the `#adapter` method on the connection builder. If you don't do so and your adapter inherits from `Faraday::Adapter` then Faraday will raise an exception. Otherwise, Faraday will automatically push the default adapter at the end of the stack causing your request to be executed twice.
|
31
|
-
```ruby
|
32
|
-
class OfficialAdapter < Faraday::Adapter
|
33
|
-
...
|
34
|
-
end
|
35
|
-
|
36
|
-
class MyAdapter
|
37
|
-
...
|
38
|
-
end
|
39
|
-
|
40
|
-
# This will raise an exception
|
41
|
-
conn = Faraday.new(...) do |f|
|
42
|
-
f.use OfficialAdapter
|
43
|
-
end
|
44
|
-
|
45
|
-
# This will cause Faraday inserting the default adapter at the end of the stack
|
46
|
-
conn = Faraday.new(...) do |f|
|
47
|
-
f.use MyAdapter
|
48
|
-
end
|
49
|
-
|
50
|
-
# You MUST use `adapter` method
|
51
|
-
conn = Faraday.new(...) do |f|
|
52
|
-
f.adapter AnyAdapter
|
53
|
-
end
|
54
|
-
```
|
55
|
-
|