faraday 1.0.1 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +3 -5
  5. data/examples/client_spec.rb +1 -1
  6. data/lib/faraday.rb +55 -41
  7. data/lib/faraday/adapter.rb +1 -8
  8. data/lib/faraday/autoload.rb +1 -6
  9. data/lib/faraday/connection.rb +11 -4
  10. data/lib/faraday/encoders/flat_params_encoder.rb +9 -2
  11. data/lib/faraday/encoders/nested_params_encoder.rb +7 -2
  12. data/lib/faraday/error.rb +20 -0
  13. data/lib/faraday/methods.rb +6 -0
  14. data/lib/faraday/middleware.rb +14 -4
  15. data/lib/faraday/options.rb +4 -8
  16. data/lib/faraday/options/proxy_options.rb +4 -0
  17. data/lib/faraday/rack_builder.rb +13 -12
  18. data/lib/faraday/request.rb +20 -10
  19. data/lib/faraday/request/multipart.rb +9 -2
  20. data/lib/faraday/request/retry.rb +2 -2
  21. data/lib/faraday/response.rb +0 -6
  22. data/lib/faraday/response/raise_error.rb +12 -1
  23. data/lib/faraday/utils.rb +2 -2
  24. data/lib/faraday/utils/headers.rb +2 -2
  25. data/lib/faraday/version.rb +5 -0
  26. data/spec/faraday/adapter/test_spec.rb +260 -0
  27. data/spec/faraday/connection_spec.rb +38 -0
  28. data/spec/faraday/error_spec.rb +15 -0
  29. data/spec/faraday/middleware_spec.rb +32 -6
  30. data/spec/faraday/options/proxy_options_spec.rb +7 -0
  31. data/spec/faraday/params_encoders/flat_spec.rb +8 -0
  32. data/spec/faraday/params_encoders/nested_spec.rb +8 -0
  33. data/spec/faraday/rack_builder_spec.rb +149 -0
  34. data/spec/faraday/request/authorization_spec.rb +2 -2
  35. data/spec/faraday/request/multipart_spec.rb +41 -13
  36. data/spec/faraday/request/retry_spec.rb +1 -1
  37. data/spec/faraday/request_spec.rb +16 -5
  38. data/spec/faraday/response/raise_error_spec.rb +63 -0
  39. data/spec/support/shared_examples/adapter.rb +2 -1
  40. data/spec/support/shared_examples/request_method.rb +39 -11
  41. metadata +92 -13
  42. data/lib/faraday/adapter/em_http.rb +0 -286
  43. data/lib/faraday/adapter/em_http_ssl_patch.rb +0 -62
  44. data/lib/faraday/adapter/em_synchrony.rb +0 -150
  45. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +0 -69
  46. data/lib/faraday/adapter/excon.rb +0 -124
  47. data/lib/faraday/adapter/net_http.rb +0 -219
  48. data/lib/faraday/adapter/net_http_persistent.rb +0 -91
  49. data/spec/faraday/adapter/net_http_persistent_spec.rb +0 -57
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d23ec0aefc40d23ccc4410db08092bd29e477309fb8aa6794b3c8401961de10
4
- data.tar.gz: c33ca7313dcccbf148266a80aa4e12d4cba96a4feb96ecfc3e8ff50fa06756c5
3
+ metadata.gz: 5b0077d079fbfe478a57bbc4f804b9e8761addcad6266587434f99534d9ca935
4
+ data.tar.gz: 465fc3bb1ad67259f4e6515ff3ea006c833d4dca43946cb79da683311eccf4e7
5
5
  SHA512:
6
- metadata.gz: 8058c22dc6e78bc3d46a9c8a22c458656a1380a4aed62b31e11b9b054fc6791373dd103276fc018148daed3934a724bcb39390bbe88e2762281ff810b61b408d
7
- data.tar.gz: 341f3b44148f666bb03f8e7b232fd92e26b8c34d758090e6e82f1276af29ff17d4f62bdb58871254ba48b2232ab58269c71db08df7a4b0c35c53f2c7e9bbe7e8
6
+ metadata.gz: 63deab2286691410961536ed63f36a5d23917227327e2ccfbc919621ba86dae8e397e8fbe3b29826a309e988a8924a8943583ac42b515aa07dd6dccacdc323a2
7
+ data.tar.gz: 5827629437871707807bcfc405f02bc6a9a19fc99cc655bb44de37fbc4aaa5c277dd29895153cb506e0718d841229c6086ef00314c262ebda7e2ac68b5f90ce6
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,9 +1,7 @@
1
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)
6
- [![Maintainability](https://api.codeclimate.com/v1/badges/f869daab091ceef1da73/maintainability)](https://codeclimate.com/github/lostisland/faraday/maintainability)
4
+ [![GitHub Actions CI](https://github.com/lostisland/faraday/workflows/CI/badge.svg)](https://github.com/lostisland/faraday/actions?query=workflow%3ACI)
7
5
  [![Gitter](https://badges.gitter.im/lostisland/faraday.svg)](https://gitter.im/lostisland/faraday?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
8
6
 
9
7
 
@@ -43,12 +41,12 @@ Open the issues page and check for the `help wanted` label!
43
41
  But before you start coding, please read our [Contributing Guide][contributing]
44
42
 
45
43
  ## Copyright
46
- &copy; 2009 - 2019, the [Faraday Team][faraday_team]. Website and branding design by [Elena Lo Piccolo](https://elelopic.design).
44
+ &copy; 2009 - 2020, the [Faraday Team][faraday_team]. Website and branding design by [Elena Lo Piccolo](https://elelopic.design).
47
45
 
48
46
  [website]: https://lostisland.github.io/faraday
49
47
  [faraday_team]: https://lostisland.github.io/faraday/team
50
48
  [contributing]: https://github.com/lostisland/faraday/blob/master/.github/CONTRIBUTING.md
51
- [apidoc]: http://www.rubydoc.info/gems/faraday
49
+ [apidoc]: https://www.rubydoc.info/github/lostisland/faraday
52
50
  [actions]: https://github.com/lostisland/faraday/actions
53
51
  [jruby]: http://jruby.org/
54
52
  [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,38 @@
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/em_http'
31
+ require 'faraday/em_synchrony'
32
+ require 'faraday/excon'
33
+ require 'faraday/net_http'
34
+ require 'faraday/net_http_persistent'
35
+
9
36
  # This is the main namespace for Faraday.
10
37
  #
11
38
  # It provides methods to create {Connection} objects, and HTTP-related
@@ -19,10 +46,6 @@ require 'faraday/dependency_loader'
19
46
  # conn.get '/'
20
47
  #
21
48
  module Faraday
22
- VERSION = '1.0.1'
23
- METHODS_WITH_QUERY = %w[get head delete trace].freeze
24
- METHODS_WITH_BODY = %w[post put patch].freeze
25
-
26
49
  class << self
27
50
  # The root path that Faraday is being loaded from.
28
51
  #
@@ -107,6 +130,34 @@ module Faraday
107
130
  default_connection.respond_to?(symbol, include_private) || super
108
131
  end
109
132
 
133
+ # @overload default_connection
134
+ # Gets the default connection used for simple scripts.
135
+ # @return [Faraday::Connection] a connection configured with
136
+ # the default_adapter.
137
+ # @overload default_connection=(connection)
138
+ # @param connection [Faraday::Connection]
139
+ # Sets the default {Faraday::Connection} for simple scripts that
140
+ # access the Faraday constant directly, such as
141
+ # <code>Faraday.get "https://faraday.com"</code>.
142
+ def default_connection
143
+ @default_connection ||= Connection.new(default_connection_options)
144
+ end
145
+
146
+ # Gets the default connection options used when calling {Faraday#new}.
147
+ #
148
+ # @return [Faraday::ConnectionOptions]
149
+ def default_connection_options
150
+ @default_connection_options ||= ConnectionOptions.new
151
+ end
152
+
153
+ # Sets the default options used when calling {Faraday#new}.
154
+ #
155
+ # @param options [Hash, Faraday::ConnectionOptions]
156
+ def default_connection_options=(options)
157
+ @default_connection = nil
158
+ @default_connection_options = ConnectionOptions.from(options)
159
+ end
160
+
110
161
  private
111
162
 
112
163
  # Internal: Proxies method calls on the Faraday constant to
@@ -125,42 +176,5 @@ module Faraday
125
176
  self.lib_path = File.expand_path 'faraday', __dir__
126
177
  self.default_adapter = :net_http
127
178
 
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 defined?(::Faraday::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
179
  require_lib 'autoload' unless ENV['FARADAY_NO_AUTOLOAD']
166
180
  end
@@ -11,22 +11,15 @@ 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
- net_http_persistent: [
16
- :NetHttpPersistent,
17
- 'net_http_persistent'
18
- ],
19
14
  typhoeus: [:Typhoeus, 'typhoeus'],
20
15
  patron: [:Patron, 'patron'],
21
- em_synchrony: [:EMSynchrony, 'em_synchrony'],
22
- em_http: [:EMHttp, 'em_http'],
23
- excon: [:Excon, 'excon'],
24
16
  rack: [:Rack, 'rack'],
25
17
  httpclient: [:HTTPClient, 'httpclient']
26
18
 
27
19
  # This module marks an Adapter as supporting parallel requests.
28
20
  module Parallelism
29
21
  attr_writer :supports_parallel
22
+
30
23
  def supports_parallel?
31
24
  @supports_parallel
32
25
  end
@@ -23,7 +23,7 @@ module Faraday
23
23
  #
24
24
  # @return [void]
25
25
  def autoload_all(prefix, options)
26
- if prefix =~ %r{^faraday(/|$)}i
26
+ if prefix.match? %r{^faraday(/|$)}i
27
27
  prefix = File.join(Faraday.root_path, prefix)
28
28
  end
29
29
 
@@ -58,13 +58,8 @@ module Faraday
58
58
  class Adapter
59
59
  extend AutoloadHelper
60
60
  autoload_all 'faraday/adapter',
61
- NetHttp: 'net_http',
62
- NetHttpPersistent: 'net_http_persistent',
63
- EMSynchrony: 'em_synchrony',
64
- EMHttp: 'em_http',
65
61
  Typhoeus: 'typhoeus',
66
62
  Patron: 'patron',
67
- Excon: 'excon',
68
63
  Test: 'test',
69
64
  Rack: 'rack',
70
65
  HTTPClient: 'httpclient'
@@ -419,6 +419,8 @@ module Faraday
419
419
  basic_auth user, password
420
420
  uri.user = uri.password = nil
421
421
  end
422
+
423
+ @proxy = proxy_from_env(url) unless @manual_proxy
422
424
  end
423
425
 
424
426
  # Sets the path prefix and ensures that it always has a leading
@@ -429,7 +431,7 @@ module Faraday
429
431
  # @return [String] the new path prefix
430
432
  def path_prefix=(value)
431
433
  url_prefix.path = if value
432
- value = '/' + value unless value[0, 1] == '/'
434
+ value = "/#{value}" unless value[0, 1] == '/'
433
435
  value
434
436
  end
435
437
  end
@@ -520,8 +522,9 @@ module Faraday
520
522
  base = url_prefix
521
523
  if url && base.path && base.path !~ %r{/$}
522
524
  base = base.dup
523
- base.path = base.path + '/' # ensure trailing slash
525
+ base.path = "#{base.path}/" # ensure trailing slash
524
526
  end
527
+ url = url && URI.parse(url.to_s).opaque ? url.to_s.gsub(':', '%3A') : url
525
528
  uri = url ? base + url : base
526
529
  if params
527
530
  uri.query = params.to_query(params_encoder || options.params_encoder)
@@ -576,7 +579,11 @@ module Faraday
576
579
  case url
577
580
  when String
578
581
  uri = Utils.URI(url)
579
- uri = URI.parse("#{uri.scheme}://#{uri.hostname}").find_proxy
582
+ uri = if uri.host.nil?
583
+ find_default_proxy
584
+ else
585
+ URI.parse("#{uri.scheme}://#{uri.host}").find_proxy
586
+ end
580
587
  when URI
581
588
  uri = url.find_proxy
582
589
  when nil
@@ -593,7 +600,7 @@ module Faraday
593
600
  uri = ENV['http_proxy']
594
601
  return unless uri && !uri.empty?
595
602
 
596
- uri = 'http://' + uri if uri !~ /^http/i
603
+ uri = "http://#{uri}" unless uri.match?(/^http/i)
597
604
  uri
598
605
  end
599
606
 
@@ -33,9 +33,9 @@ module Faraday
33
33
  key = key.to_s if key.is_a?(Symbol)
34
34
  [key, value]
35
35
  end
36
- # Useful default for OAuth and caching.
36
+
37
37
  # Only to be used for non-Array inputs. Arrays should preserve order.
38
- params.sort!
38
+ params.sort! if @sort_params
39
39
  end
40
40
 
41
41
  # The params have form [['key1', 'value1'], ['key2', 'value2']].
@@ -94,5 +94,12 @@ module Faraday
94
94
  end
95
95
  end
96
96
  end
97
+
98
+ class << self
99
+ attr_accessor :sort_params
100
+ end
101
+
102
+ # Useful default for OAuth and caching.
103
+ @sort_params = true
97
104
  end
98
105
  end
@@ -21,9 +21,9 @@ module Faraday
21
21
  key = key.to_s if key.is_a?(Symbol)
22
22
  [key, value]
23
23
  end
24
- # Useful default for OAuth and caching.
24
+
25
25
  # Only to be used for non-Array inputs. Arrays should preserve order.
26
- params.sort!
26
+ params.sort! if @sort_params
27
27
  end
28
28
 
29
29
  # The params have form [['key1', 'value1'], ['key2', 'value2']].
@@ -161,10 +161,15 @@ module Faraday
161
161
  # for your requests.
162
162
  module NestedParamsEncoder
163
163
  class << self
164
+ attr_accessor :sort_params
165
+
164
166
  extend Forwardable
165
167
  def_delegators :'Faraday::Utils', :escape, :unescape
166
168
  end
167
169
 
170
+ # Useful default for OAuth and caching.
171
+ @sort_params = true
172
+
168
173
  extend EncodeMethods
169
174
  extend DecodeMethods
170
175
  end
data/lib/faraday/error.rb CHANGED
@@ -28,6 +28,18 @@ module Faraday
28
28
  %(#<#{self.class}#{inner}>)
29
29
  end
30
30
 
31
+ def response_status
32
+ @response[:status] if @response
33
+ end
34
+
35
+ def response_headers
36
+ @response[:headers] if @response
37
+ end
38
+
39
+ def response_body
40
+ @response[:body] if @response
41
+ end
42
+
31
43
  protected
32
44
 
33
45
  # Pulls out potential parent exception and response hash, storing them in
@@ -38,6 +50,14 @@ module Faraday
38
50
  # :headers - String key/value hash of HTTP response header
39
51
  # values.
40
52
  # :body - Optional string HTTP response body.
53
+ # :request - Hash
54
+ # :method - Symbol with the request HTTP method.
55
+ # :url_path - String with the url path requested.
56
+ # :params - String key/value hash of query params
57
+ # present in the request.
58
+ # :headers - String key/value hash of HTTP request
59
+ # header values.
60
+ # :body - String HTTP request body.
41
61
  #
42
62
  # If a subclass has to call this, then it should pass a string message
43
63
  # to `super`. See NilStatusError.