faraday 1.4.1 → 2.14.2

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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +198 -4
  3. data/LICENSE.md +1 -1
  4. data/README.md +34 -20
  5. data/Rakefile +6 -1
  6. data/examples/client_spec.rb +67 -13
  7. data/examples/client_test.rb +81 -16
  8. data/lib/faraday/adapter/test.rb +117 -52
  9. data/lib/faraday/adapter.rb +12 -20
  10. data/lib/faraday/connection.rb +86 -134
  11. data/lib/faraday/encoders/flat_params_encoder.rb +3 -2
  12. data/lib/faraday/encoders/nested_params_encoder.rb +15 -7
  13. data/lib/faraday/error.rb +65 -15
  14. data/lib/faraday/logging/formatter.rb +30 -17
  15. data/lib/faraday/middleware.rb +44 -3
  16. data/lib/faraday/middleware_registry.rb +17 -63
  17. data/lib/faraday/options/connection_options.rb +7 -6
  18. data/lib/faraday/options/env.rb +88 -65
  19. data/lib/faraday/options/proxy_options.rb +17 -6
  20. data/lib/faraday/options/request_options.rb +8 -7
  21. data/lib/faraday/options/ssl_options.rb +62 -45
  22. data/lib/faraday/options.rb +8 -7
  23. data/lib/faraday/rack_builder.rb +46 -47
  24. data/lib/faraday/request/authorization.rb +37 -38
  25. data/lib/faraday/request/instrumentation.rb +5 -1
  26. data/lib/faraday/request/json.rb +70 -0
  27. data/lib/faraday/request/url_encoded.rb +5 -1
  28. data/lib/faraday/request.rb +20 -37
  29. data/lib/faraday/response/json.rb +74 -0
  30. data/lib/faraday/response/logger.rb +13 -7
  31. data/lib/faraday/response/raise_error.rb +45 -18
  32. data/lib/faraday/response.rb +15 -21
  33. data/lib/faraday/utils/headers.rb +18 -7
  34. data/lib/faraday/utils.rb +11 -7
  35. data/lib/faraday/version.rb +1 -1
  36. data/lib/faraday.rb +12 -32
  37. data/spec/faraday/adapter/test_spec.rb +182 -0
  38. data/spec/faraday/connection_spec.rb +219 -92
  39. data/spec/faraday/error_spec.rb +122 -7
  40. data/spec/faraday/middleware_registry_spec.rb +31 -0
  41. data/spec/faraday/middleware_spec.rb +163 -2
  42. data/spec/faraday/options/env_spec.rb +8 -2
  43. data/spec/faraday/options/options_spec.rb +1 -1
  44. data/spec/faraday/options/proxy_options_spec.rb +42 -0
  45. data/spec/faraday/params_encoders/nested_spec.rb +10 -1
  46. data/spec/faraday/rack_builder_spec.rb +26 -54
  47. data/spec/faraday/request/authorization_spec.rb +54 -24
  48. data/spec/faraday/request/instrumentation_spec.rb +5 -7
  49. data/spec/faraday/request/json_spec.rb +199 -0
  50. data/spec/faraday/request/url_encoded_spec.rb +12 -2
  51. data/spec/faraday/request_spec.rb +14 -15
  52. data/spec/faraday/response/json_spec.rb +206 -0
  53. data/spec/faraday/response/logger_spec.rb +84 -5
  54. data/spec/faraday/response/raise_error_spec.rb +133 -16
  55. data/spec/faraday/response_spec.rb +10 -1
  56. data/spec/faraday/utils/headers_spec.rb +31 -4
  57. data/spec/faraday/utils_spec.rb +66 -2
  58. data/spec/faraday_spec.rb +10 -4
  59. data/spec/spec_helper.rb +6 -5
  60. data/spec/support/fake_safe_buffer.rb +1 -1
  61. data/spec/support/faraday_middleware_subclasses.rb +18 -0
  62. data/spec/support/helper_methods.rb +0 -37
  63. data/spec/support/shared_examples/adapter.rb +2 -2
  64. data/spec/support/shared_examples/request_method.rb +22 -21
  65. metadata +27 -81
  66. data/lib/faraday/adapter/em_http.rb +0 -289
  67. data/lib/faraday/adapter/em_http_ssl_patch.rb +0 -62
  68. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +0 -69
  69. data/lib/faraday/adapter/em_synchrony.rb +0 -153
  70. data/lib/faraday/adapter/httpclient.rb +0 -152
  71. data/lib/faraday/adapter/patron.rb +0 -132
  72. data/lib/faraday/adapter/rack.rb +0 -75
  73. data/lib/faraday/adapter/typhoeus.rb +0 -15
  74. data/lib/faraday/autoload.rb +0 -92
  75. data/lib/faraday/dependency_loader.rb +0 -37
  76. data/lib/faraday/file_part.rb +0 -128
  77. data/lib/faraday/param_part.rb +0 -53
  78. data/lib/faraday/request/basic_authentication.rb +0 -20
  79. data/lib/faraday/request/multipart.rb +0 -106
  80. data/lib/faraday/request/retry.rb +0 -239
  81. data/lib/faraday/request/token_authentication.rb +0 -20
  82. data/spec/faraday/adapter/em_http_spec.rb +0 -47
  83. data/spec/faraday/adapter/em_synchrony_spec.rb +0 -16
  84. data/spec/faraday/adapter/excon_spec.rb +0 -49
  85. data/spec/faraday/adapter/httpclient_spec.rb +0 -73
  86. data/spec/faraday/adapter/net_http_spec.rb +0 -64
  87. data/spec/faraday/adapter/patron_spec.rb +0 -18
  88. data/spec/faraday/adapter/rack_spec.rb +0 -8
  89. data/spec/faraday/adapter/typhoeus_spec.rb +0 -7
  90. data/spec/faraday/composite_read_io_spec.rb +0 -80
  91. data/spec/faraday/request/multipart_spec.rb +0 -302
  92. data/spec/faraday/request/retry_spec.rb +0 -242
  93. data/spec/faraday/response/middleware_spec.rb +0 -68
  94. data/spec/support/webmock_rack_app.rb +0 -68
@@ -21,32 +21,16 @@ module Faraday
21
21
  # @!attribute headers
22
22
  # @return [Faraday::Utils::Headers] headers
23
23
  # @!attribute body
24
- # @return [Hash] body
24
+ # @return [String] body
25
25
  # @!attribute options
26
26
  # @return [RequestOptions] options
27
- #
28
- # rubocop:disable Style/StructInheritance
29
- class Request < Struct.new(
30
- :http_method, :path, :params, :headers, :body, :options
31
- )
32
- # rubocop:enable Style/StructInheritance
33
-
27
+ Request = Struct.new(:http_method, :path, :params, :headers, :body, :options) do
34
28
  extend MiddlewareRegistry
35
29
 
36
- register_middleware File.expand_path('request', __dir__),
37
- url_encoded: [:UrlEncoded, 'url_encoded'],
38
- multipart: [:Multipart, 'multipart'],
39
- retry: [:Retry, 'retry'],
40
- authorization: [:Authorization, 'authorization'],
41
- basic_auth: [
42
- :BasicAuthentication,
43
- 'basic_authentication'
44
- ],
45
- token_auth: [
46
- :TokenAuthentication,
47
- 'token_authentication'
48
- ],
49
- instrumentation: [:Instrumentation, 'instrumentation']
30
+ alias_method :member_get, :[]
31
+ private :member_get
32
+ alias_method :member_set, :[]=
33
+ private :member_set
50
34
 
51
35
  # @param request_method [String]
52
36
  # @yield [request] for block customization, if block given
@@ -58,14 +42,7 @@ module Faraday
58
42
  end
59
43
  end
60
44
 
61
- def method
62
- warn <<~TEXT
63
- WARNING: `Faraday::Request##{__method__}` is deprecated; use `#http_method` instead. It will be removed in or after version 2.0.
64
- `Faraday::Request##{__method__}` called from #{caller_locations(1..1).first}
65
- TEXT
66
- http_method
67
- end
68
-
45
+ remove_method :params=
69
46
  # Replace params, preserving the existing hash type.
70
47
  #
71
48
  # @param hash [Hash] new params
@@ -73,10 +50,11 @@ module Faraday
73
50
  if params
74
51
  params.replace hash
75
52
  else
76
- super
53
+ member_set(:params, hash)
77
54
  end
78
55
  end
79
56
 
57
+ remove_method :headers=
80
58
  # Replace request headers, preserving the existing hash type.
81
59
  #
82
60
  # @param hash [Hash] new headers
@@ -84,7 +62,7 @@ module Faraday
84
62
  if headers
85
63
  headers.replace hash
86
64
  else
87
- super
65
+ member_set(:headers, hash)
88
66
  end
89
67
  end
90
68
 
@@ -140,11 +118,11 @@ module Faraday
140
118
  # @param serialised [Hash] the serialised object.
141
119
  def marshal_load(serialised)
142
120
  self.http_method = serialised[:http_method]
143
- self.body = serialised[:body]
144
- self.headers = serialised[:headers]
145
- self.path = serialised[:path]
146
- self.params = serialised[:params]
147
- self.options = serialised[:options]
121
+ self.body = serialised[:body]
122
+ self.headers = serialised[:headers]
123
+ self.path = serialised[:path]
124
+ self.params = serialised[:params]
125
+ self.options = serialised[:options]
148
126
  end
149
127
 
150
128
  # @return [Env] the Env for this Request
@@ -154,3 +132,8 @@ module Faraday
154
132
  end
155
133
  end
156
134
  end
135
+
136
+ require 'faraday/request/authorization'
137
+ require 'faraday/request/instrumentation'
138
+ require 'faraday/request/json'
139
+ require 'faraday/request/url_encoded'
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Faraday
6
+ class Response
7
+ # Parse response bodies as JSON.
8
+ class Json < Middleware
9
+ def initialize(app = nil, parser_options: nil, content_type: /\bjson$/, preserve_raw: false)
10
+ super(app)
11
+ @parser_options = parser_options
12
+ @content_types = Array(content_type)
13
+ @preserve_raw = preserve_raw
14
+
15
+ process_parser_options
16
+ end
17
+
18
+ def on_complete(env)
19
+ process_response(env) if parse_response?(env)
20
+ end
21
+
22
+ private
23
+
24
+ def process_response(env)
25
+ env[:raw_body] = env[:body] if @preserve_raw
26
+ env[:body] = parse(env[:body])
27
+ rescue StandardError, SyntaxError => e
28
+ raise Faraday::ParsingError.new(e, env[:response])
29
+ end
30
+
31
+ def parse(body)
32
+ return if body.strip.empty?
33
+
34
+ decoder, method_name = @decoder_options
35
+
36
+ decoder.public_send(method_name, body, @parser_options || {})
37
+ end
38
+
39
+ def parse_response?(env)
40
+ process_response_type?(env) &&
41
+ env[:body].respond_to?(:to_str)
42
+ end
43
+
44
+ def process_response_type?(env)
45
+ type = response_type(env)
46
+ @content_types.empty? || @content_types.any? do |pattern|
47
+ pattern.is_a?(Regexp) ? type.match?(pattern) : type == pattern
48
+ end
49
+ end
50
+
51
+ def response_type(env)
52
+ type = env[:response_headers][CONTENT_TYPE].to_s
53
+ type = type.split(';', 2).first if type.index(';')
54
+ type
55
+ end
56
+
57
+ def process_parser_options
58
+ @decoder_options = @parser_options&.delete(:decoder)
59
+
60
+ @decoder_options =
61
+ if @decoder_options.is_a?(Array) && @decoder_options.size >= 2
62
+ @decoder_options.slice(0, 2)
63
+ elsif @decoder_options&.respond_to?(:load) # rubocop:disable Lint/RedundantSafeNavigation
64
+ # In some versions of Rails, `nil` responds to `load` - hence the safe navigation check above
65
+ [@decoder_options, :load]
66
+ else
67
+ [::JSON, :parse]
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ Faraday::Response.register_middleware(json: Faraday::Response::Json)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'forwardable'
4
+ require 'logger'
4
5
  require 'faraday/logging/formatter'
5
6
 
6
7
  module Faraday
@@ -9,14 +10,13 @@ module Faraday
9
10
  # lifecycle to a given Logger object. By default, this logs to STDOUT. See
10
11
  # Faraday::Logging::Formatter to see specifically what is logged.
11
12
  class Logger < Middleware
13
+ DEFAULT_OPTIONS = { formatter: Logging::Formatter }.merge(Logging::Formatter::DEFAULT_OPTIONS).freeze
14
+
12
15
  def initialize(app, logger = nil, options = {})
13
- super(app)
14
- logger ||= begin
15
- require 'logger'
16
- ::Logger.new($stdout)
17
- end
18
- formatter_class = options.delete(:formatter) || Logging::Formatter
19
- @formatter = formatter_class.new(logger: logger, options: options)
16
+ super(app, options)
17
+ logger ||= ::Logger.new($stdout)
18
+ formatter_class = @options.delete(:formatter)
19
+ @formatter = formatter_class.new(logger: logger, options: @options)
20
20
  yield @formatter if block_given?
21
21
  end
22
22
 
@@ -28,6 +28,12 @@ module Faraday
28
28
  def on_complete(env)
29
29
  @formatter.response(env)
30
30
  end
31
+
32
+ def on_error(exc)
33
+ @formatter.exception(exc) if @formatter.respond_to?(:exception)
34
+ end
31
35
  end
32
36
  end
33
37
  end
38
+
39
+ Faraday::Response.register_middleware(logger: Faraday::Response::Logger)
@@ -6,28 +6,32 @@ module Faraday
6
6
  # client or server error responses.
7
7
  class RaiseError < Middleware
8
8
  # rubocop:disable Naming/ConstantName
9
- ClientErrorStatuses = (400...500).freeze
10
- ServerErrorStatuses = (500...600).freeze
9
+ ClientErrorStatuses = (400...500)
10
+ ServerErrorStatuses = (500...600)
11
+ ClientErrorStatusesWithCustomExceptions = {
12
+ 400 => Faraday::BadRequestError,
13
+ 401 => Faraday::UnauthorizedError,
14
+ 403 => Faraday::ForbiddenError,
15
+ 404 => Faraday::ResourceNotFound,
16
+ 408 => Faraday::RequestTimeoutError,
17
+ 409 => Faraday::ConflictError,
18
+ 422 => Faraday::UnprocessableContentError,
19
+ 429 => Faraday::TooManyRequestsError
20
+ }.freeze
11
21
  # rubocop:enable Naming/ConstantName
12
22
 
23
+ DEFAULT_OPTIONS = { include_request: true, allowed_statuses: [] }.freeze
24
+
13
25
  def on_complete(env)
26
+ return if Array(options[:allowed_statuses]).include?(env[:status])
27
+
14
28
  case env[:status]
15
- when 400
16
- raise Faraday::BadRequestError, response_values(env)
17
- when 401
18
- raise Faraday::UnauthorizedError, response_values(env)
19
- when 403
20
- raise Faraday::ForbiddenError, response_values(env)
21
- when 404
22
- raise Faraday::ResourceNotFound, response_values(env)
29
+ when *ClientErrorStatusesWithCustomExceptions.keys
30
+ raise ClientErrorStatusesWithCustomExceptions[env[:status]], response_values(env)
23
31
  when 407
24
32
  # mimic the behavior that we get with proxy requests with HTTPS
25
33
  msg = %(407 "Proxy Authentication Required")
26
34
  raise Faraday::ProxyAuthError.new(msg, response_values(env))
27
- when 409
28
- raise Faraday::ConflictError, response_values(env)
29
- when 422
30
- raise Faraday::UnprocessableEntityError, response_values(env)
31
35
  when ClientErrorStatuses
32
36
  raise Faraday::ClientError, response_values(env)
33
37
  when ServerErrorStatuses
@@ -37,20 +41,43 @@ module Faraday
37
41
  end
38
42
  end
39
43
 
44
+ # Returns a hash of response data with the following keys:
45
+ # - status
46
+ # - headers
47
+ # - body
48
+ # - request
49
+ #
50
+ # The `request` key is omitted when the middleware is explicitly
51
+ # configured with the option `include_request: false`.
40
52
  def response_values(env)
41
- {
53
+ response = {
42
54
  status: env.status,
43
55
  headers: env.response_headers,
44
- body: env.body,
56
+ body: env.body
57
+ }
58
+
59
+ # Include the request data by default. If the middleware was explicitly
60
+ # configured to _not_ include request data, then omit it.
61
+ return response unless options[:include_request]
62
+
63
+ response.merge(
45
64
  request: {
46
65
  method: env.method,
66
+ url: env.url,
47
67
  url_path: env.url.path,
48
- params: env.params,
68
+ params: query_params(env),
49
69
  headers: env.request_headers,
50
70
  body: env.request_body
51
71
  }
52
- }
72
+ )
73
+ end
74
+
75
+ def query_params(env)
76
+ env.request.params_encoder ||= Faraday::Utils.default_params_encoder
77
+ env.params_encoder.decode(env.url.query)
53
78
  end
54
79
  end
55
80
  end
56
81
  end
82
+
83
+ Faraday::Response.register_middleware(raise_error: Faraday::Response::RaiseError)
@@ -5,25 +5,9 @@ require 'forwardable'
5
5
  module Faraday
6
6
  # Response represents an HTTP response from making an HTTP request.
7
7
  class Response
8
- # Used for simple response middleware.
9
- class Middleware < Faraday::Middleware
10
- # Override this to modify the environment after the response has finished.
11
- # Calls the `parse` method if defined
12
- # `parse` method can be defined as private, public and protected
13
- def on_complete(env)
14
- return unless respond_to?(:parse, true) && env.parse_body?
15
-
16
- env.body = parse(env.body)
17
- end
18
- end
19
-
20
8
  extend Forwardable
21
9
  extend MiddlewareRegistry
22
10
 
23
- register_middleware File.expand_path('response', __dir__),
24
- raise_error: [:RaiseError, 'raise_error'],
25
- logger: [:Logger, 'logger']
26
-
27
11
  def initialize(env = nil)
28
12
  @env = Env.from(env) if env
29
13
  @on_complete_callbacks = []
@@ -42,21 +26,26 @@ module Faraday
42
26
  def headers
43
27
  finished? ? env.response_headers : {}
44
28
  end
29
+
45
30
  def_delegator :headers, :[]
46
31
 
47
32
  def body
48
33
  finished? ? env.body : nil
49
34
  end
50
35
 
36
+ def url
37
+ finished? ? env.url : nil
38
+ end
39
+
51
40
  def finished?
52
41
  !!env
53
42
  end
54
43
 
55
44
  def on_complete(&block)
56
- if !finished?
57
- @on_complete_callbacks << block
58
- else
45
+ if finished?
59
46
  yield(env)
47
+ else
48
+ @on_complete_callbacks << block
60
49
  end
61
50
  self
62
51
  end
@@ -75,8 +64,9 @@ module Faraday
75
64
 
76
65
  def to_hash
77
66
  {
78
- status: env.status, body: env.body,
79
- response_headers: env.response_headers
67
+ status: status, body: body,
68
+ response_headers: headers,
69
+ url: url
80
70
  }
81
71
  end
82
72
 
@@ -99,3 +89,7 @@ module Faraday
99
89
  end
100
90
  end
101
91
  end
92
+
93
+ require 'faraday/response/json'
94
+ require 'faraday/response/logger'
95
+ require 'faraday/response/raise_error'
@@ -51,7 +51,7 @@ module Faraday
51
51
 
52
52
  def [](key)
53
53
  key = KeyMap[key]
54
- super(key) || super(@names[key.downcase])
54
+ super || super(@names[key.downcase])
55
55
  end
56
56
 
57
57
  def []=(key, val)
@@ -59,13 +59,13 @@ module Faraday
59
59
  key = (@names[key.downcase] ||= key)
60
60
  # join multiple values with a comma
61
61
  val = val.to_ary.join(', ') if val.respond_to?(:to_ary)
62
- super(key, val)
62
+ super
63
63
  end
64
64
 
65
- def fetch(key, *args, &block)
65
+ def fetch(key, ...)
66
66
  key = KeyMap[key]
67
67
  key = @names.fetch(key.downcase, key)
68
- super(key, *args, &block)
68
+ super
69
69
  end
70
70
 
71
71
  def delete(key)
@@ -74,7 +74,13 @@ module Faraday
74
74
  return unless key
75
75
 
76
76
  @names.delete key.downcase
77
- super(key)
77
+ super
78
+ end
79
+
80
+ def dig(key, *rest)
81
+ key = KeyMap[key]
82
+ key = @names.fetch(key.downcase, key)
83
+ super
78
84
  end
79
85
 
80
86
  def include?(key)
@@ -111,7 +117,7 @@ module Faraday
111
117
  def parse(header_string)
112
118
  return unless header_string && !header_string.empty?
113
119
 
114
- headers = header_string.split(/\r\n/)
120
+ headers = header_string.split("\r\n")
115
121
 
116
122
  # Find the last set of response headers.
117
123
  start_index = headers.rindex { |x| x.start_with?('HTTP/') } || 0
@@ -132,7 +138,12 @@ module Faraday
132
138
 
133
139
  # Join multiple values with a comma.
134
140
  def add_parsed(key, value)
135
- self[key] ? self[key] << ', ' << value : self[key] = value
141
+ if key?(key)
142
+ self[key] = self[key].to_s
143
+ self[key] << ', ' << value
144
+ else
145
+ self[key] = value
146
+ end
136
147
  end
137
148
  end
138
149
  end
data/lib/faraday/utils.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'uri'
3
4
  require 'faraday/utils/headers'
4
5
  require 'faraday/utils/params_hash'
5
6
 
@@ -24,7 +25,7 @@ module Faraday
24
25
  attr_writer :default_space_encoding
25
26
  end
26
27
 
27
- ESCAPE_RE = /[^a-zA-Z0-9 .~_-]/.freeze
28
+ ESCAPE_RE = /[^a-zA-Z0-9 .~_-]/
28
29
 
29
30
  def escape(str)
30
31
  str.to_s.gsub(ESCAPE_RE) do |match|
@@ -36,7 +37,7 @@ module Faraday
36
37
  CGI.unescape str.to_s
37
38
  end
38
39
 
39
- DEFAULT_SEP = /[&;] */n.freeze
40
+ DEFAULT_SEP = /[&;] */n
40
41
 
41
42
  # Adapted from Rack
42
43
  def parse_query(query)
@@ -51,6 +52,12 @@ module Faraday
51
52
  @default_params_encoder ||= NestedParamsEncoder
52
53
  end
53
54
 
55
+ def basic_header_from(login, pass)
56
+ value = ["#{login}:#{pass}"].pack('m') # Base64 encoding
57
+ value.delete!("\n")
58
+ "Basic #{value}"
59
+ end
60
+
54
61
  class << self
55
62
  attr_writer :default_params_encoder
56
63
  end
@@ -71,10 +78,7 @@ module Faraday
71
78
  end
72
79
 
73
80
  def default_uri_parser
74
- @default_uri_parser ||= begin
75
- require 'uri'
76
- Kernel.method(:URI)
77
- end
81
+ @default_uri_parser ||= Kernel.method(:URI)
78
82
  end
79
83
 
80
84
  def default_uri_parser=(parser)
@@ -96,7 +100,7 @@ module Faraday
96
100
  # Recursive hash update
97
101
  def deep_merge!(target, hash)
98
102
  hash.each do |key, value|
99
- target[key] = if value.is_a?(Hash) && target[key].is_a?(Hash)
103
+ target[key] = if value.is_a?(Hash) && (target[key].is_a?(Hash) || target[key].is_a?(Options))
100
104
  deep_merge(target[key], value)
101
105
  else
102
106
  value
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Faraday
4
- VERSION = '1.4.1'
4
+ VERSION = '2.14.2'
5
5
  end
data/lib/faraday.rb CHANGED
@@ -1,19 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cgi'
3
+ require 'cgi/escape'
4
+ require 'cgi/util' if RUBY_VERSION < '3.5'
4
5
  require 'date'
5
6
  require 'set'
6
7
  require 'forwardable'
7
- require 'faraday/middleware_registry'
8
- require 'faraday/dependency_loader'
9
-
10
- unless defined?(::Faraday::Timer)
11
- require 'timeout'
12
- ::Faraday::Timer = Timeout
13
- end
14
-
15
8
  require 'faraday/version'
16
9
  require 'faraday/methods'
10
+ require 'faraday/error'
11
+ require 'faraday/middleware_registry'
17
12
  require 'faraday/utils'
18
13
  require 'faraday/options'
19
14
  require 'faraday/connection'
@@ -23,14 +18,7 @@ require 'faraday/middleware'
23
18
  require 'faraday/adapter'
24
19
  require 'faraday/request'
25
20
  require 'faraday/response'
26
- require 'faraday/error'
27
- require 'faraday/file_part'
28
- require 'faraday/param_part'
29
-
30
21
  require 'faraday/net_http'
31
- require 'faraday/net_http_persistent'
32
- require 'faraday/excon'
33
-
34
22
  # This is the main namespace for Faraday.
35
23
  #
36
24
  # It provides methods to create {Connection} objects, and HTTP-related
@@ -44,6 +32,8 @@ require 'faraday/excon'
44
32
  # conn.get '/'
45
33
  #
46
34
  module Faraday
35
+ CONTENT_TYPE = 'Content-Type'
36
+
47
37
  class << self
48
38
  # The root path that Faraday is being loaded from.
49
39
  #
@@ -65,6 +55,10 @@ module Faraday
65
55
  # @return [Symbol] the new default_adapter.
66
56
  attr_reader :default_adapter
67
57
 
58
+ # Option for the default_adapter
59
+ # @return [Hash] default_adapter options
60
+ attr_accessor :default_adapter_options
61
+
68
62
  # Documented below, see default_connection
69
63
  attr_writer :default_connection
70
64
 
@@ -101,23 +95,10 @@ module Faraday
101
95
  # params: { page: 1 }
102
96
  # # => Faraday::Connection to http://faraday.com?page=1
103
97
  def new(url = nil, options = {}, &block)
104
- options = default_connection_options.merge(options)
98
+ options = Utils.deep_merge(default_connection_options, options)
105
99
  Faraday::Connection.new(url, options, &block)
106
100
  end
107
101
 
108
- # @private
109
- # Internal: Requires internal Faraday libraries.
110
- #
111
- # @param libs [Array] one or more relative String names to Faraday classes.
112
- # @return [void]
113
- def require_libs(*libs)
114
- libs.each do |lib|
115
- require "#{lib_path}/#{lib}"
116
- end
117
- end
118
-
119
- alias require_lib require_libs
120
-
121
102
  # Documented elsewhere, see default_adapter reader
122
103
  def default_adapter=(adapter)
123
104
  @default_connection = nil
@@ -173,6 +154,5 @@ module Faraday
173
154
  self.root_path = File.expand_path __dir__
174
155
  self.lib_path = File.expand_path 'faraday', __dir__
175
156
  self.default_adapter = :net_http
176
-
177
- require_lib 'autoload' unless ENV['FARADAY_NO_AUTOLOAD']
157
+ self.default_adapter_options = {}
178
158
  end