faraday 0.16.0 → 0.17.4

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +232 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +358 -18
  5. data/Rakefile +13 -0
  6. data/lib/faraday/adapter/em_http.rb +97 -140
  7. data/lib/faraday/adapter/em_http_ssl_patch.rb +17 -23
  8. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +15 -18
  9. data/lib/faraday/adapter/em_synchrony.rb +60 -104
  10. data/lib/faraday/adapter/excon.rb +55 -100
  11. data/lib/faraday/adapter/httpclient.rb +39 -61
  12. data/lib/faraday/adapter/net_http.rb +51 -103
  13. data/lib/faraday/adapter/net_http_persistent.rb +28 -49
  14. data/lib/faraday/adapter/patron.rb +35 -54
  15. data/lib/faraday/adapter/rack.rb +12 -28
  16. data/lib/faraday/adapter/test.rb +53 -86
  17. data/lib/faraday/adapter/typhoeus.rb +1 -4
  18. data/lib/faraday/adapter.rb +22 -36
  19. data/lib/faraday/autoload.rb +36 -47
  20. data/lib/faraday/connection.rb +179 -321
  21. data/lib/faraday/deprecate.rb +109 -0
  22. data/lib/faraday/error.rb +79 -21
  23. data/lib/faraday/middleware.rb +28 -4
  24. data/lib/faraday/options.rb +183 -32
  25. data/lib/faraday/parameters.rb +197 -4
  26. data/lib/faraday/rack_builder.rb +55 -66
  27. data/lib/faraday/request/authorization.rb +30 -42
  28. data/lib/faraday/request/basic_authentication.rb +7 -14
  29. data/lib/faraday/request/instrumentation.rb +27 -45
  30. data/lib/faraday/request/multipart.rb +48 -79
  31. data/lib/faraday/request/retry.rb +171 -197
  32. data/lib/faraday/request/token_authentication.rb +10 -15
  33. data/lib/faraday/request/url_encoded.rb +23 -41
  34. data/lib/faraday/request.rb +36 -68
  35. data/lib/faraday/response/logger.rb +69 -22
  36. data/lib/faraday/response/raise_error.rb +18 -36
  37. data/lib/faraday/response.rb +13 -20
  38. data/lib/faraday/upload_io.rb +67 -0
  39. data/lib/faraday/utils.rb +245 -28
  40. data/lib/faraday.rb +174 -93
  41. data/spec/faraday/deprecate_spec.rb +147 -0
  42. data/spec/faraday/error_spec.rb +102 -0
  43. data/spec/faraday/response/raise_error_spec.rb +106 -0
  44. data/spec/spec_helper.rb +105 -0
  45. data/test/adapters/default_test.rb +14 -0
  46. data/test/adapters/em_http_test.rb +30 -0
  47. data/test/adapters/em_synchrony_test.rb +32 -0
  48. data/test/adapters/excon_test.rb +30 -0
  49. data/test/adapters/httpclient_test.rb +34 -0
  50. data/test/adapters/integration.rb +263 -0
  51. data/test/adapters/logger_test.rb +136 -0
  52. data/test/adapters/net_http_persistent_test.rb +114 -0
  53. data/test/adapters/net_http_test.rb +79 -0
  54. data/test/adapters/patron_test.rb +40 -0
  55. data/test/adapters/rack_test.rb +38 -0
  56. data/test/adapters/test_middleware_test.rb +157 -0
  57. data/test/adapters/typhoeus_test.rb +38 -0
  58. data/test/authentication_middleware_test.rb +65 -0
  59. data/test/composite_read_io_test.rb +109 -0
  60. data/test/connection_test.rb +738 -0
  61. data/test/env_test.rb +268 -0
  62. data/test/helper.rb +75 -0
  63. data/test/live_server.rb +67 -0
  64. data/test/middleware/instrumentation_test.rb +88 -0
  65. data/test/middleware/retry_test.rb +282 -0
  66. data/test/middleware_stack_test.rb +260 -0
  67. data/test/multibyte.txt +1 -0
  68. data/test/options_test.rb +333 -0
  69. data/test/parameters_test.rb +157 -0
  70. data/test/request_middleware_test.rb +126 -0
  71. data/test/response_middleware_test.rb +72 -0
  72. data/test/strawberry.rb +2 -0
  73. data/test/utils_test.rb +98 -0
  74. metadata +50 -25
  75. data/lib/faraday/adapter_registry.rb +0 -28
  76. data/lib/faraday/dependency_loader.rb +0 -37
  77. data/lib/faraday/encoders/flat_params_encoder.rb +0 -94
  78. data/lib/faraday/encoders/nested_params_encoder.rb +0 -171
  79. data/lib/faraday/file_part.rb +0 -128
  80. data/lib/faraday/logging/formatter.rb +0 -92
  81. data/lib/faraday/middleware_registry.rb +0 -129
  82. data/lib/faraday/options/connection_options.rb +0 -22
  83. data/lib/faraday/options/env.rb +0 -181
  84. data/lib/faraday/options/proxy_options.rb +0 -28
  85. data/lib/faraday/options/request_options.rb +0 -21
  86. data/lib/faraday/options/ssl_options.rb +0 -59
  87. data/lib/faraday/param_part.rb +0 -53
  88. data/lib/faraday/utils/headers.rb +0 -139
  89. data/lib/faraday/utils/params_hash.rb +0 -61
  90. data/spec/external_adapters/faraday_specs_setup.rb +0 -14
@@ -1,139 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Faraday
4
- module Utils
5
- # A case-insensitive Hash that preserves the original case of a header
6
- # when set.
7
- #
8
- # Adapted from Rack::Utils::HeaderHash
9
- class Headers < ::Hash
10
- def self.from(value)
11
- new(value)
12
- end
13
-
14
- def self.allocate
15
- new_self = super
16
- new_self.initialize_names
17
- new_self
18
- end
19
-
20
- def initialize(hash = nil)
21
- super()
22
- @names = {}
23
- update(hash || {})
24
- end
25
-
26
- def initialize_names
27
- @names = {}
28
- end
29
-
30
- # on dup/clone, we need to duplicate @names hash
31
- def initialize_copy(other)
32
- super
33
- @names = other.names.dup
34
- end
35
-
36
- # need to synchronize concurrent writes to the shared KeyMap
37
- keymap_mutex = Mutex.new
38
-
39
- # symbol -> string mapper + cache
40
- KeyMap = Hash.new do |map, key|
41
- value = if key.respond_to?(:to_str)
42
- key
43
- else
44
- key.to_s.split('_') # user_agent: %w(user agent)
45
- .each(&:capitalize!) # => %w(User Agent)
46
- .join('-') # => "User-Agent"
47
- end
48
- keymap_mutex.synchronize { map[key] = value }
49
- end
50
- KeyMap[:etag] = 'ETag'
51
-
52
- def [](key)
53
- key = KeyMap[key]
54
- super(key) || super(@names[key.downcase])
55
- end
56
-
57
- def []=(key, val)
58
- key = KeyMap[key]
59
- key = (@names[key.downcase] ||= key)
60
- # join multiple values with a comma
61
- val = val.to_ary.join(', ') if val.respond_to?(:to_ary)
62
- super(key, val)
63
- end
64
-
65
- def fetch(key, *args, &block)
66
- key = KeyMap[key]
67
- key = @names.fetch(key.downcase, key)
68
- super(key, *args, &block)
69
- end
70
-
71
- def delete(key)
72
- key = KeyMap[key]
73
- key = @names[key.downcase]
74
- return unless key
75
-
76
- @names.delete key.downcase
77
- super(key)
78
- end
79
-
80
- def include?(key)
81
- @names.include? key.downcase
82
- end
83
-
84
- alias has_key? include?
85
- alias member? include?
86
- alias key? include?
87
-
88
- def merge!(other)
89
- other.each { |k, v| self[k] = v }
90
- self
91
- end
92
-
93
- alias update merge!
94
-
95
- def merge(other)
96
- hash = dup
97
- hash.merge! other
98
- end
99
-
100
- def replace(other)
101
- clear
102
- @names.clear
103
- update other
104
- self
105
- end
106
-
107
- def to_hash
108
- ::Hash.new.update(self)
109
- end
110
-
111
- def parse(header_string)
112
- return unless header_string && !header_string.empty?
113
-
114
- headers = header_string.split(/\r\n/)
115
-
116
- # Find the last set of response headers.
117
- start_index = headers.rindex { |x| x.match(%r{^HTTP/}) } || 0
118
- last_response = headers.slice(start_index, headers.size)
119
-
120
- last_response
121
- .tap { |a| a.shift if a.first.start_with?('HTTP/') }
122
- .map { |h| h.split(/:\s*/, 2) } # split key and value
123
- .reject { |p| p[0].nil? } # ignore blank lines
124
- .each { |key, value| add_parsed(key, value) }
125
- end
126
-
127
- protected
128
-
129
- attr_reader :names
130
-
131
- private
132
-
133
- # Join multiple values with a comma.
134
- def add_parsed(key, value)
135
- self[key] ? self[key] << ', ' << value : self[key] = value
136
- end
137
- end
138
- end
139
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Faraday
4
- module Utils
5
- # A hash with stringified keys.
6
- class ParamsHash < Hash
7
- def [](key)
8
- super(convert_key(key))
9
- end
10
-
11
- def []=(key, value)
12
- super(convert_key(key), value)
13
- end
14
-
15
- def delete(key)
16
- super(convert_key(key))
17
- end
18
-
19
- def include?(key)
20
- super(convert_key(key))
21
- end
22
-
23
- alias has_key? include?
24
- alias member? include?
25
- alias key? include?
26
-
27
- def update(params)
28
- params.each do |key, value|
29
- self[key] = value
30
- end
31
- self
32
- end
33
- alias merge! update
34
-
35
- def merge(params)
36
- dup.update(params)
37
- end
38
-
39
- def replace(other)
40
- clear
41
- update(other)
42
- end
43
-
44
- def merge_query(query, encoder = nil)
45
- return self unless query && !query.empty?
46
-
47
- update((encoder || Utils.default_params_encoder).decode(query))
48
- end
49
-
50
- def to_query(encoder = nil)
51
- (encoder || Utils.default_params_encoder).encode(self)
52
- end
53
-
54
- private
55
-
56
- def convert_key(key)
57
- key.to_s
58
- end
59
- end
60
- end
61
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'webmock/rspec'
4
- WebMock.disable_net_connect!(allow_localhost: true)
5
-
6
- require_relative '../support/helper_methods'
7
- require_relative '../support/disabling_stub'
8
- require_relative '../support/streaming_response_checker'
9
- require_relative '../support/shared_examples/adapter'
10
- require_relative '../support/shared_examples/request_method'
11
-
12
- RSpec.configure do |config|
13
- config.include Faraday::HelperMethods
14
- end