faraday 1.0.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +4 -5
  5. data/examples/client_spec.rb +1 -1
  6. data/lib/faraday.rb +51 -41
  7. data/lib/faraday/adapter.rb +1 -1
  8. data/lib/faraday/adapter/em_http.rb +18 -14
  9. data/lib/faraday/adapter/em_synchrony.rb +16 -13
  10. data/lib/faraday/adapter/excon.rb +2 -2
  11. data/lib/faraday/adapter/httpclient.rb +2 -1
  12. data/lib/faraday/adapter/net_http_persistent.rb +1 -1
  13. data/lib/faraday/adapter/typhoeus.rb +1 -1
  14. data/lib/faraday/adapter_registry.rb +3 -1
  15. data/lib/faraday/autoload.rb +1 -2
  16. data/lib/faraday/connection.rb +5 -4
  17. data/lib/faraday/encoders/flat_params_encoder.rb +9 -2
  18. data/lib/faraday/encoders/nested_params_encoder.rb +7 -2
  19. data/lib/faraday/error.rb +20 -0
  20. data/lib/faraday/methods.rb +6 -0
  21. data/lib/faraday/middleware.rb +14 -4
  22. data/lib/faraday/options.rb +4 -8
  23. data/lib/faraday/rack_builder.rb +13 -12
  24. data/lib/faraday/request.rb +20 -10
  25. data/lib/faraday/request/authorization.rb +3 -1
  26. data/lib/faraday/request/multipart.rb +10 -3
  27. data/lib/faraday/request/retry.rb +2 -2
  28. data/lib/faraday/request/url_encoded.rb +3 -1
  29. data/lib/faraday/response.rb +4 -7
  30. data/lib/faraday/response/raise_error.rb +12 -1
  31. data/lib/faraday/utils.rb +11 -3
  32. data/lib/faraday/utils/headers.rb +2 -2
  33. data/lib/faraday/version.rb +5 -0
  34. data/spec/faraday/adapter/em_http_spec.rb +1 -1
  35. data/spec/faraday/adapter/em_synchrony_spec.rb +1 -1
  36. data/spec/faraday/adapter/patron_spec.rb +1 -1
  37. data/spec/faraday/adapter/test_spec.rb +260 -0
  38. data/spec/faraday/connection_spec.rb +30 -0
  39. data/spec/faraday/error_spec.rb +15 -0
  40. data/spec/faraday/middleware_spec.rb +32 -6
  41. data/spec/faraday/params_encoders/flat_spec.rb +8 -0
  42. data/spec/faraday/params_encoders/nested_spec.rb +8 -0
  43. data/spec/faraday/rack_builder_spec.rb +150 -1
  44. data/spec/faraday/request/authorization_spec.rb +2 -2
  45. data/spec/faraday/request/multipart_spec.rb +41 -13
  46. data/spec/faraday/request/retry_spec.rb +1 -1
  47. data/spec/faraday/request/url_encoded_spec.rb +13 -0
  48. data/spec/faraday/request_spec.rb +16 -5
  49. data/spec/faraday/response/middleware_spec.rb +16 -0
  50. data/spec/faraday/response/raise_error_spec.rb +63 -0
  51. data/spec/support/shared_examples/adapter.rb +2 -1
  52. data/spec/support/shared_examples/request_method.rb +39 -11
  53. metadata +37 -7
  54. data/UPGRADING.md +0 -55
  55. data/lib/faraday/adapter/net_http.rb +0 -209
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d3d650c5d465a0862cddd7ab2ed27fbfb4a6e5f2cfcbb54ba753bcc1ce9e40e
4
- data.tar.gz: 953336deeb3dd2e0228368209bdffc7815b376772269c439e21374bc22b70484
3
+ metadata.gz: f9d5c03389960019760f7f65d5546b799c93d2fcc810ed26c3c6a859a0716586
4
+ data.tar.gz: faf33941683ee46c907dad01243f5be4ca60fe46336bbfcf9e534afa7bfc74e3
5
5
  SHA512:
6
- metadata.gz: b80c084a8714d995dec61c918891a63720dbcdddf2eb3ecb7106f40a03bb341c4f03ffe976365c5450b2dcffd0b1f52c1cd4320ea24591dfaef7d5fdbbe12562
7
- data.tar.gz: 67f8134fae885d3bb2e621afa701d6d535409bbb0141ad699f4d290059d61bf856915f622e214251f05e8b893a69bf68439118074712a22e75e3705b249dbb85
6
+ metadata.gz: 67bea3c978d5e531a47513b81f56f144ccd696ee0adf67ea14b2198ed29ea809cf0dd1223c400feef67688af10db8b9a8abd239cb284c111300a420190aef9a4
7
+ data.tar.gz: a520bc7078beb472b43f963921040230ab29d14b7df138a85bc3fce77f1cbfc5c74f2d41a380ad9821b7d0cffa9f3d3c03448a258ecaa7c6dfbb993df02ac3e9
data/CHANGELOG.md CHANGED
@@ -1,5 +1,109 @@
1
1
  # Faraday Changelog
2
2
 
3
+ ## [v1.3.0](https://github.com/lostisland/faraday/releases/tag/v1.3.0) (2020-12-31)
4
+
5
+ ### Highlights
6
+ Faraday v1.3.0 is the first release to officially support Ruby 3.0 in the CI pipeline 🎉 🍾!
7
+
8
+ This is also the first release with a previously "included" adapter (Net::HTTP) being isolated into a [separate gem](https://github.com/lostisland/faraday-net_http) 🎊!
9
+ The new adapter is added to Faraday as a dependency for now, so that means full backwards-compatibility, but just to be safe be careful when upgrading!
10
+
11
+ This is a huge step towards are Faraday v2.0 objective of pushing adapters and middleware into separate gems.
12
+ Many thanks to the Faraday Team, @JanDintel and everyone who attended the [ROSS Conf remote event](https://www.rossconf.io/event/remote/)
13
+
14
+ ### Features
15
+
16
+ * Improves consistency with Faraday::Error and Faraday::RaiseError (#1229, @qsona, @iMacTia)
17
+
18
+ ### Fixes
19
+
20
+ * Don't assign to global ::Timer (#1227, @bpo)
21
+
22
+ ### Documentation
23
+
24
+ * CHANGELOG: add releases after 1.0 (#1225, @olleolleolle)
25
+ * Improves retry middleware documentation. (#1228, @iMacTia)
26
+
27
+ ### Misc
28
+
29
+ * Move out Net::HTTP adapter (#1222, @JanDintel, @iMacTia)
30
+ * Adds Ruby 3.0 to CI Matrix (#1226, @iMacTia)
31
+
32
+
33
+ ## [v1.2.0](https://github.com/lostisland/faraday/releases/tag/v1.2.0) (2020-12-23)
34
+
35
+ ### Features
36
+
37
+ * Introduces `on_request` and `on_complete` methods in `Faraday::Middleware`. (#1194, @iMacTia)
38
+
39
+ ### Fixes
40
+
41
+ * Require 'date' to avoid retry exception (#1206, @rustygeldmacher)
42
+ * Fix rdebug recursion issue (#1205, @native-api)
43
+ * Update call to `em_http_ssl_patch` (#1202, @kylekeesling)
44
+ * `EmHttp` adapter: drop superfluous loaded? check (#1213, @olleolleolle)
45
+ * Avoid 1 use of keyword hackery (#1211, @grosser)
46
+ * Fix #1219 `Net::HTTP` still uses env proxy (#1221, @iMacTia)
47
+
48
+ ### Documentation
49
+
50
+ * Add comment in gemspec to explain exposure of `examples` and `spec` folders. (#1192, @iMacTia)
51
+ * Adapters, how to create them (#1193, @olleolleolle)
52
+ * Update documentation on using the logger (#1196, @tijmenb)
53
+ * Adjust the retry documentation and spec to align with implementation (#1198, @nbeyer)
54
+
55
+ ### Misc
56
+
57
+ * Test against ruby head (#1208, @grosser)
58
+
59
+ ## [v1.1.0](https://github.com/lostisland/faraday/releases/tag/v1.1.0) (2020-10-17)
60
+
61
+ ### Features
62
+
63
+ * Makes parameters sorting configurable (#1162 @wishdev)
64
+ * Introduces `flat_encode` option for multipart adapter. (#1163 @iMacTia)
65
+ * Include request info in exceptions raised by RaiseError Middleware (#1181 @SandroDamilano)
66
+
67
+ ### Fixes
68
+
69
+ * Avoid `last arg as keyword param` warning when building user middleware on Ruby 2.7 (#1153 @dgholz)
70
+ * Limits net-http-persistent version to < 4.0 (#1156 @iMacTia)
71
+ * Update `typhoeus` to new stable version (`1.4`) (#1159 @AlexWayfer)
72
+ * Properly fix test failure with Rack 2.1+. (#1171 @voxik)
73
+
74
+ ### Documentation
75
+
76
+ * Improves documentation on how to contribute to the site by using Docker. (#1175 @iMacTia)
77
+ * Remove retry_change_requests from documentation (#1185 @stim371)
78
+
79
+ ### Misc
80
+
81
+ * Link from GitHub Actions badge to CI workflow (#1141 @olleolleolle)
82
+ * Return tests of `Test` adapter (#1147 @AlexWayfer)
83
+ * Add 1.0 release to wording in CONTRIBUTING (#1155 @olleolleolle)
84
+ * Fix linting bumping Rubocop to 0.90.0 (#1182 @iMacTia)
85
+ * Drop `git ls-files` in gemspec (#1183 @utkarsh2102)
86
+ * Upgrade CI to ruby/setup-ruby (#1187 @gogainda)
87
+
88
+ ## [v1.0.1](https://github.com/lostisland/faraday/releases/tag/v1.0.1) (2020-03-29)
89
+
90
+ ### Fixes
91
+
92
+ * Use Net::HTTP#start(&block) to ensure closed TCP connections (#1117)
93
+ * Fully qualify constants to be checked (#1122)
94
+ * Allows `parse` method to be private/protected in response middleware (#1123)
95
+ * Encode Spaces in Query Strings as '%20' Instead of '+' (#1125)
96
+ * Limits rack to v2.0.x (#1127)
97
+ * Adapter Registry reads also use mutex (#1136)
98
+
99
+ ### Documentation
100
+
101
+ * Retry middleware documentation fix (#1109)
102
+ * Docs(retry): precise usage of retry-after (#1111)
103
+ * README: Link the logo to the website (#1112)
104
+ * Website: add search bar (#1116)
105
+ * Fix request/response mix-up in docs text (#1132)
106
+
3
107
  ## v1.0
4
108
 
5
109
  Features:
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009-2019 Rick Olson, Zack Hobson
1
+ Copyright (c) 2009-2020 Rick Olson, Zack Hobson
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,8 +1,7 @@
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
- ![GitHub Actions CI](https://github.com/lostisland/faraday/workflows/CI/badge.svg)
5
- [![Test Coverage](https://api.codeclimate.com/v1/badges/f869daab091ceef1da73/test_coverage)](https://codeclimate.com/github/lostisland/faraday/test_coverage)
4
+ [![GitHub Actions CI](https://github.com/lostisland/faraday/workflows/CI/badge.svg)](https://github.com/lostisland/faraday/actions?query=workflow%3ACI)
6
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/f869daab091ceef1da73/maintainability)](https://codeclimate.com/github/lostisland/faraday/maintainability)
7
6
  [![Gitter](https://badges.gitter.im/lostisland/faraday.svg)](https://gitter.im/lostisland/faraday?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
8
7
 
@@ -43,12 +42,12 @@ Open the issues page and check for the `help wanted` label!
43
42
  But before you start coding, please read our [Contributing Guide][contributing]
44
43
 
45
44
  ## Copyright
46
- &copy; 2009 - 2019, the [Faraday Team][faraday_team]. Website and branding design by [Elena Lo Piccolo](https://elelopic.design).
45
+ &copy; 2009 - 2020, the [Faraday Team][faraday_team]. Website and branding design by [Elena Lo Piccolo](https://elelopic.design).
47
46
 
48
47
  [website]: https://lostisland.github.io/faraday
49
48
  [faraday_team]: https://lostisland.github.io/faraday/team
50
49
  [contributing]: https://github.com/lostisland/faraday/blob/master/.github/CONTRIBUTING.md
51
- [apidoc]: http://www.rubydoc.info/gems/faraday
50
+ [apidoc]: https://www.rubydoc.info/github/lostisland/faraday
52
51
  [actions]: https://github.com/lostisland/faraday/actions
53
52
  [jruby]: http://jruby.org/
54
53
  [rubinius]: http://rubini.us/
@@ -19,7 +19,7 @@ class Client
19
19
  end
20
20
  end
21
21
 
22
- Rspec.describe Client do
22
+ RSpec.describe Client do
23
23
  let(:stubs) { Faraday::Adapter::Test::Stubs.new }
24
24
  let(:conn) { Faraday.new { |b| b.adapter(:test, stubs) } }
25
25
  let(:client) { Client.new(conn) }
data/lib/faraday.rb CHANGED
@@ -1,11 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cgi'
4
+ require 'date'
4
5
  require 'set'
5
6
  require 'forwardable'
6
7
  require 'faraday/middleware_registry'
7
8
  require 'faraday/dependency_loader'
8
9
 
10
+ unless defined?(::Faraday::Timer)
11
+ require 'timeout'
12
+ ::Faraday::Timer = Timeout
13
+ end
14
+
15
+ require 'faraday/version'
16
+ require 'faraday/methods'
17
+ require 'faraday/utils'
18
+ require 'faraday/options'
19
+ require 'faraday/connection'
20
+ require 'faraday/rack_builder'
21
+ require 'faraday/parameters'
22
+ require 'faraday/middleware'
23
+ require 'faraday/adapter'
24
+ require 'faraday/request'
25
+ require 'faraday/response'
26
+ require 'faraday/error'
27
+ require 'faraday/file_part'
28
+ require 'faraday/param_part'
29
+
30
+ require 'faraday/net_http'
31
+
9
32
  # This is the main namespace for Faraday.
10
33
  #
11
34
  # It provides methods to create {Connection} objects, and HTTP-related
@@ -19,10 +42,6 @@ require 'faraday/dependency_loader'
19
42
  # conn.get '/'
20
43
  #
21
44
  module Faraday
22
- VERSION = '1.0.0'
23
- METHODS_WITH_QUERY = %w[get head delete trace].freeze
24
- METHODS_WITH_BODY = %w[post put patch].freeze
25
-
26
45
  class << self
27
46
  # The root path that Faraday is being loaded from.
28
47
  #
@@ -107,6 +126,34 @@ module Faraday
107
126
  default_connection.respond_to?(symbol, include_private) || super
108
127
  end
109
128
 
129
+ # @overload default_connection
130
+ # Gets the default connection used for simple scripts.
131
+ # @return [Faraday::Connection] a connection configured with
132
+ # the default_adapter.
133
+ # @overload default_connection=(connection)
134
+ # @param connection [Faraday::Connection]
135
+ # Sets the default {Faraday::Connection} for simple scripts that
136
+ # access the Faraday constant directly, such as
137
+ # <code>Faraday.get "https://faraday.com"</code>.
138
+ def default_connection
139
+ @default_connection ||= Connection.new(default_connection_options)
140
+ end
141
+
142
+ # Gets the default connection options used when calling {Faraday#new}.
143
+ #
144
+ # @return [Faraday::ConnectionOptions]
145
+ def default_connection_options
146
+ @default_connection_options ||= ConnectionOptions.new
147
+ end
148
+
149
+ # Sets the default options used when calling {Faraday#new}.
150
+ #
151
+ # @param options [Hash, Faraday::ConnectionOptions]
152
+ def default_connection_options=(options)
153
+ @default_connection = nil
154
+ @default_connection_options = ConnectionOptions.from(options)
155
+ end
156
+
110
157
  private
111
158
 
112
159
  # Internal: Proxies method calls on the Faraday constant to
@@ -125,42 +172,5 @@ module Faraday
125
172
  self.lib_path = File.expand_path 'faraday', __dir__
126
173
  self.default_adapter = :net_http
127
174
 
128
- # @overload default_connection
129
- # Gets the default connection used for simple scripts.
130
- # @return [Faraday::Connection] a connection configured with
131
- # the default_adapter.
132
- # @overload default_connection=(connection)
133
- # @param connection [Faraday::Connection]
134
- # Sets the default {Faraday::Connection} for simple scripts that
135
- # access the Faraday constant directly, such as
136
- # <code>Faraday.get "https://faraday.com"</code>.
137
- def self.default_connection
138
- @default_connection ||= Connection.new(default_connection_options)
139
- end
140
-
141
- # Gets the default connection options used when calling {Faraday#new}.
142
- #
143
- # @return [Faraday::ConnectionOptions]
144
- def self.default_connection_options
145
- @default_connection_options ||= ConnectionOptions.new
146
- end
147
-
148
- # Sets the default options used when calling {Faraday#new}.
149
- #
150
- # @param options [Hash, Faraday::ConnectionOptions]
151
- def self.default_connection_options=(options)
152
- @default_connection = nil
153
- @default_connection_options = ConnectionOptions.from(options)
154
- end
155
-
156
- unless const_defined? :Timer
157
- require 'timeout'
158
- Timer = Timeout
159
- end
160
-
161
- require_libs 'utils', 'options', 'connection', 'rack_builder', 'parameters',
162
- 'middleware', 'adapter', 'request', 'response', 'error',
163
- 'file_part', 'param_part'
164
-
165
175
  require_lib 'autoload' unless ENV['FARADAY_NO_AUTOLOAD']
166
176
  end
@@ -11,7 +11,6 @@ module Faraday
11
11
 
12
12
  register_middleware File.expand_path('adapter', __dir__),
13
13
  test: [:Test, 'test'],
14
- net_http: [:NetHttp, 'net_http'],
15
14
  net_http_persistent: [
16
15
  :NetHttpPersistent,
17
16
  'net_http_persistent'
@@ -27,6 +26,7 @@ module Faraday
27
26
  # This module marks an Adapter as supporting parallel requests.
28
27
  module Parallelism
29
28
  attr_writer :supports_parallel
29
+
30
30
  def supports_parallel?
31
31
  @supports_parallel
32
32
  end
@@ -90,7 +90,21 @@ module Faraday
90
90
 
91
91
  include Options
92
92
 
93
- dependency 'em-http'
93
+ dependency do
94
+ require 'em-http'
95
+
96
+ begin
97
+ require 'openssl'
98
+ rescue LoadError
99
+ warn 'Warning: no such file to load -- openssl. ' \
100
+ 'Make sure it is installed if you want HTTPS support'
101
+ else
102
+ require 'em-http/version'
103
+ if EventMachine::HttpRequest::VERSION < '1.1.6'
104
+ require 'faraday/adapter/em_http_ssl_patch'
105
+ end
106
+ end
107
+ end
94
108
 
95
109
  self.supports_parallel = true
96
110
 
@@ -142,7 +156,8 @@ module Faraday
142
156
 
143
157
  raise Faraday::ConnectionFailed, e
144
158
  rescue StandardError => e
145
- if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
159
+ if defined?(::OpenSSL::SSL::SSLError) && \
160
+ e.is_a?(::OpenSSL::SSL::SSLError)
146
161
  raise Faraday::SSLError, e
147
162
  end
148
163
 
@@ -230,7 +245,7 @@ module Faraday
230
245
 
231
246
  def add(&block)
232
247
  if running?
233
- perform_request { yield }
248
+ perform_request(&block)
234
249
  else
235
250
  @registered_procs << block
236
251
  end
@@ -272,14 +287,3 @@ module Faraday
272
287
  end
273
288
  end
274
289
  end
275
-
276
- if Faraday::Adapter::EMHttp.loaded?
277
- begin
278
- require 'openssl'
279
- rescue LoadError
280
- warn 'Warning: no such file to load -- openssl. ' \
281
- 'Make sure it is installed if you want HTTPS support'
282
- else
283
- require 'faraday/adapter/em_http_ssl_patch'
284
- end
285
- end
@@ -12,6 +12,22 @@ module Faraday
12
12
  require 'em-synchrony/em-http'
13
13
  require 'em-synchrony/em-multi'
14
14
  require 'fiber'
15
+
16
+ require 'faraday/adapter/em_synchrony/parallel_manager'
17
+
18
+ if Faraday::Adapter::EMSynchrony.loaded?
19
+ begin
20
+ require 'openssl'
21
+ rescue LoadError
22
+ warn 'Warning: no such file to load -- openssl. ' \
23
+ 'Make sure it is installed if you want HTTPS support'
24
+ else
25
+ require 'em-http/version'
26
+ if EventMachine::HttpRequest::VERSION < '1.1.6'
27
+ require 'faraday/adapter/em_http_ssl_patch'
28
+ end
29
+ end
30
+ end
15
31
  end
16
32
 
17
33
  self.supports_parallel = true
@@ -135,16 +151,3 @@ module Faraday
135
151
  end
136
152
  end
137
153
  end
138
-
139
- require 'faraday/adapter/em_synchrony/parallel_manager'
140
-
141
- if Faraday::Adapter::EMSynchrony.loaded?
142
- begin
143
- require 'openssl'
144
- rescue LoadError
145
- warn 'Warning: no such file to load -- openssl. ' \
146
- 'Make sure it is installed if you want HTTPS support'
147
- else
148
- require 'faraday/adapter/em_http_ssl_patch'
149
- end
150
- end
@@ -34,9 +34,9 @@ module Faraday
34
34
 
35
35
  @app.call(env)
36
36
  rescue ::Excon::Errors::SocketError => e
37
- raise Faraday::TimeoutError, e if e.message =~ /\btimeout\b/
37
+ raise Faraday::TimeoutError, e if e.message.match?(/\btimeout\b/)
38
38
 
39
- raise Faraday::SSLError, e if e.message =~ /\bcertificate\b/
39
+ raise Faraday::SSLError, e if e.message.match?(/\bcertificate\b/)
40
40
 
41
41
  raise Faraday::ConnectionFailed, e
42
42
  rescue ::Excon::Errors::Timeout => e
@@ -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) && e.is_a?(OpenSSL::SSL::SSLError)
69
+ if defined?(::OpenSSL::SSL::SSLError) && \
70
+ e.is_a?(::OpenSSL::SSL::SSLError)
70
71
  raise Faraday::SSLError, e
71
72
  end
72
73
 
@@ -51,7 +51,7 @@ module Faraday
51
51
 
52
52
  def perform_request(http, env)
53
53
  http.request env[:url], create_request(env)
54
- rescue Errno::ETIMEDOUT => e
54
+ rescue Errno::ETIMEDOUT, Net::OpenTimeout => e
55
55
  raise Faraday::TimeoutError, e
56
56
  rescue Net::HTTP::Persistent::Error => e
57
57
  raise Faraday::TimeoutError, e if e.message.include? 'Timeout'
@@ -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/philsturgeon/typhoeus/blob/master/lib/typhoeus/adapters/faraday.rb
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