oso-cloud 1.8.0 → 1.9.1.pre.vendored.0

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 (113) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +31 -12
  5. data/README.md +1 -1
  6. data/lib/oso/api.rb +18 -2
  7. data/lib/oso/oso.rb +10 -7
  8. data/lib/oso/version.rb +1 -1
  9. data/vendor/gems/faraday-2.5.2/CHANGELOG.md +574 -0
  10. data/vendor/gems/faraday-2.5.2/LICENSE.md +20 -0
  11. data/vendor/gems/faraday-2.5.2/README.md +55 -0
  12. data/vendor/gems/faraday-2.5.2/Rakefile +7 -0
  13. data/vendor/gems/faraday-2.5.2/examples/client_spec.rb +119 -0
  14. data/vendor/gems/faraday-2.5.2/examples/client_test.rb +144 -0
  15. data/vendor/gems/faraday-2.5.2/lib/faraday/adapter/test.rb +298 -0
  16. data/vendor/gems/faraday-2.5.2/lib/faraday/adapter.rb +102 -0
  17. data/vendor/gems/faraday-2.5.2/lib/faraday/adapter_registry.rb +30 -0
  18. data/vendor/gems/faraday-2.5.2/lib/faraday/connection.rb +561 -0
  19. data/vendor/gems/faraday-2.5.2/lib/faraday/encoders/flat_params_encoder.rb +105 -0
  20. data/vendor/gems/faraday-2.5.2/lib/faraday/encoders/nested_params_encoder.rb +183 -0
  21. data/vendor/gems/faraday-2.5.2/lib/faraday/error.rb +147 -0
  22. data/vendor/gems/faraday-2.5.2/lib/faraday/logging/formatter.rb +106 -0
  23. data/vendor/gems/faraday-2.5.2/lib/faraday/methods.rb +6 -0
  24. data/vendor/gems/faraday-2.5.2/lib/faraday/middleware.rb +30 -0
  25. data/vendor/gems/faraday-2.5.2/lib/faraday/middleware_registry.rb +83 -0
  26. data/vendor/gems/faraday-2.5.2/lib/faraday/options/connection_options.rb +22 -0
  27. data/vendor/gems/faraday-2.5.2/lib/faraday/options/env.rb +199 -0
  28. data/vendor/gems/faraday-2.5.2/lib/faraday/options/proxy_options.rb +32 -0
  29. data/vendor/gems/faraday-2.5.2/lib/faraday/options/request_options.rb +22 -0
  30. data/vendor/gems/faraday-2.5.2/lib/faraday/options/ssl_options.rb +69 -0
  31. data/vendor/gems/faraday-2.5.2/lib/faraday/options.rb +218 -0
  32. data/vendor/gems/faraday-2.5.2/lib/faraday/parameters.rb +5 -0
  33. data/vendor/gems/faraday-2.5.2/lib/faraday/rack_builder.rb +252 -0
  34. data/vendor/gems/faraday-2.5.2/lib/faraday/request/authorization.rb +49 -0
  35. data/vendor/gems/faraday-2.5.2/lib/faraday/request/instrumentation.rb +56 -0
  36. data/vendor/gems/faraday-2.5.2/lib/faraday/request/json.rb +55 -0
  37. data/vendor/gems/faraday-2.5.2/lib/faraday/request/url_encoded.rb +60 -0
  38. data/vendor/gems/faraday-2.5.2/lib/faraday/request.rb +136 -0
  39. data/vendor/gems/faraday-2.5.2/lib/faraday/response/json.rb +54 -0
  40. data/vendor/gems/faraday-2.5.2/lib/faraday/response/logger.rb +33 -0
  41. data/vendor/gems/faraday-2.5.2/lib/faraday/response/raise_error.rb +64 -0
  42. data/vendor/gems/faraday-2.5.2/lib/faraday/response.rb +90 -0
  43. data/vendor/gems/faraday-2.5.2/lib/faraday/utils/headers.rb +139 -0
  44. data/vendor/gems/faraday-2.5.2/lib/faraday/utils/params_hash.rb +61 -0
  45. data/vendor/gems/faraday-2.5.2/lib/faraday/utils.rb +122 -0
  46. data/vendor/gems/faraday-2.5.2/lib/faraday/version.rb +5 -0
  47. data/vendor/gems/faraday-2.5.2/lib/faraday.rb +157 -0
  48. data/vendor/gems/faraday-2.5.2/spec/external_adapters/faraday_specs_setup.rb +14 -0
  49. data/vendor/gems/faraday-2.5.2/spec/faraday/adapter/test_spec.rb +413 -0
  50. data/vendor/gems/faraday-2.5.2/spec/faraday/adapter_registry_spec.rb +28 -0
  51. data/vendor/gems/faraday-2.5.2/spec/faraday/adapter_spec.rb +55 -0
  52. data/vendor/gems/faraday-2.5.2/spec/faraday/connection_spec.rb +793 -0
  53. data/vendor/gems/faraday-2.5.2/spec/faraday/error_spec.rb +60 -0
  54. data/vendor/gems/faraday-2.5.2/spec/faraday/middleware_registry_spec.rb +31 -0
  55. data/vendor/gems/faraday-2.5.2/spec/faraday/middleware_spec.rb +52 -0
  56. data/vendor/gems/faraday-2.5.2/spec/faraday/options/env_spec.rb +76 -0
  57. data/vendor/gems/faraday-2.5.2/spec/faraday/options/options_spec.rb +297 -0
  58. data/vendor/gems/faraday-2.5.2/spec/faraday/options/proxy_options_spec.rb +44 -0
  59. data/vendor/gems/faraday-2.5.2/spec/faraday/options/request_options_spec.rb +19 -0
  60. data/vendor/gems/faraday-2.5.2/spec/faraday/params_encoders/flat_spec.rb +42 -0
  61. data/vendor/gems/faraday-2.5.2/spec/faraday/params_encoders/nested_spec.rb +150 -0
  62. data/vendor/gems/faraday-2.5.2/spec/faraday/rack_builder_spec.rb +317 -0
  63. data/vendor/gems/faraday-2.5.2/spec/faraday/request/authorization_spec.rb +83 -0
  64. data/vendor/gems/faraday-2.5.2/spec/faraday/request/instrumentation_spec.rb +74 -0
  65. data/vendor/gems/faraday-2.5.2/spec/faraday/request/json_spec.rb +111 -0
  66. data/vendor/gems/faraday-2.5.2/spec/faraday/request/url_encoded_spec.rb +93 -0
  67. data/vendor/gems/faraday-2.5.2/spec/faraday/request_spec.rb +110 -0
  68. data/vendor/gems/faraday-2.5.2/spec/faraday/response/json_spec.rb +117 -0
  69. data/vendor/gems/faraday-2.5.2/spec/faraday/response/logger_spec.rb +220 -0
  70. data/vendor/gems/faraday-2.5.2/spec/faraday/response/raise_error_spec.rb +172 -0
  71. data/vendor/gems/faraday-2.5.2/spec/faraday/response_spec.rb +75 -0
  72. data/vendor/gems/faraday-2.5.2/spec/faraday/utils/headers_spec.rb +82 -0
  73. data/vendor/gems/faraday-2.5.2/spec/faraday/utils_spec.rb +118 -0
  74. data/vendor/gems/faraday-2.5.2/spec/faraday_spec.rb +37 -0
  75. data/vendor/gems/faraday-2.5.2/spec/spec_helper.rb +132 -0
  76. data/vendor/gems/faraday-2.5.2/spec/support/disabling_stub.rb +14 -0
  77. data/vendor/gems/faraday-2.5.2/spec/support/fake_safe_buffer.rb +15 -0
  78. data/vendor/gems/faraday-2.5.2/spec/support/helper_methods.rb +96 -0
  79. data/vendor/gems/faraday-2.5.2/spec/support/shared_examples/adapter.rb +105 -0
  80. data/vendor/gems/faraday-2.5.2/spec/support/shared_examples/params_encoder.rb +18 -0
  81. data/vendor/gems/faraday-2.5.2/spec/support/shared_examples/request_method.rb +263 -0
  82. data/vendor/gems/faraday-2.5.2/spec/support/streaming_response_checker.rb +35 -0
  83. data/vendor/gems/faraday-net_http-3.0.2/LICENSE.md +21 -0
  84. data/vendor/gems/faraday-net_http-3.0.2/README.md +57 -0
  85. data/vendor/gems/faraday-net_http-3.0.2/lib/faraday/adapter/net_http.rb +208 -0
  86. data/vendor/gems/faraday-net_http-3.0.2/lib/faraday/net_http/version.rb +7 -0
  87. data/vendor/gems/faraday-net_http-3.0.2/lib/faraday/net_http.rb +10 -0
  88. data/vendor/gems/faraday-net_http_persistent-2.3.0/LICENSE.md +21 -0
  89. data/vendor/gems/faraday-net_http_persistent-2.3.0/README.md +66 -0
  90. data/vendor/gems/faraday-net_http_persistent-2.3.0/lib/faraday/adapter/net_http_persistent.rb +234 -0
  91. data/vendor/gems/faraday-net_http_persistent-2.3.0/lib/faraday/net_http_persistent/version.rb +7 -0
  92. data/vendor/gems/faraday-net_http_persistent-2.3.0/lib/faraday/net_http_persistent.rb +18 -0
  93. data/vendor/gems/faraday-retry-2.0.0/CHANGELOG.md +24 -0
  94. data/vendor/gems/faraday-retry-2.0.0/LICENSE.md +21 -0
  95. data/vendor/gems/faraday-retry-2.0.0/README.md +169 -0
  96. data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retriable_response.rb +8 -0
  97. data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retry/middleware.rb +254 -0
  98. data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retry/version.rb +7 -0
  99. data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retry.rb +13 -0
  100. data/vendor/gems/net-http-persistent-4.0.5/.autotest +9 -0
  101. data/vendor/gems/net-http-persistent-4.0.5/.gemtest +0 -0
  102. data/vendor/gems/net-http-persistent-4.0.5/Gemfile +14 -0
  103. data/vendor/gems/net-http-persistent-4.0.5/History.txt +460 -0
  104. data/vendor/gems/net-http-persistent-4.0.5/Manifest.txt +13 -0
  105. data/vendor/gems/net-http-persistent-4.0.5/README.rdoc +82 -0
  106. data/vendor/gems/net-http-persistent-4.0.5/Rakefile +25 -0
  107. data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent/connection.rb +41 -0
  108. data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent/pool.rb +65 -0
  109. data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  110. data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent.rb +1158 -0
  111. data/vendor/gems/net-http-persistent-4.0.5/test/test_net_http_persistent.rb +1512 -0
  112. data/vendor/gems/net-http-persistent-4.0.5/test/test_net_http_persistent_timed_stack_multi.rb +151 -0
  113. metadata +112 -8
@@ -0,0 +1,183 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ # Sub-module for encoding parameters into query-string.
5
+ module EncodeMethods
6
+ # @param params [nil, Array, #to_hash] parameters to be encoded
7
+ #
8
+ # @return [String] the encoded params
9
+ #
10
+ # @raise [TypeError] if params can not be converted to a Hash
11
+ def encode(params)
12
+ return nil if params.nil?
13
+
14
+ unless params.is_a?(Array)
15
+ unless params.respond_to?(:to_hash)
16
+ raise TypeError, "Can't convert #{params.class} into Hash."
17
+ end
18
+
19
+ params = params.to_hash
20
+ params = params.map do |key, value|
21
+ key = key.to_s if key.is_a?(Symbol)
22
+ [key, value]
23
+ end
24
+
25
+ # Only to be used for non-Array inputs. Arrays should preserve order.
26
+ params.sort! if @sort_params
27
+ end
28
+
29
+ # The params have form [['key1', 'value1'], ['key2', 'value2']].
30
+ buffer = +''
31
+ params.each do |parent, value|
32
+ encoded_parent = escape(parent)
33
+ buffer << "#{encode_pair(encoded_parent, value)}&"
34
+ end
35
+ buffer.chop
36
+ end
37
+
38
+ protected
39
+
40
+ def encode_pair(parent, value)
41
+ if value.is_a?(Hash)
42
+ encode_hash(parent, value)
43
+ elsif value.is_a?(Array)
44
+ encode_array(parent, value)
45
+ elsif value.nil?
46
+ parent
47
+ else
48
+ encoded_value = escape(value)
49
+ "#{parent}=#{encoded_value}"
50
+ end
51
+ end
52
+
53
+ def encode_hash(parent, value)
54
+ value = value.map { |key, val| [escape(key), val] }.sort
55
+
56
+ buffer = +''
57
+ value.each do |key, val|
58
+ new_parent = "#{parent}%5B#{key}%5D"
59
+ buffer << "#{encode_pair(new_parent, val)}&"
60
+ end
61
+ buffer.chop
62
+ end
63
+
64
+ def encode_array(parent, value)
65
+ return "#{parent}%5B%5D" if value.empty?
66
+
67
+ buffer = +''
68
+ value.each_with_index do |val, index|
69
+ new_parent = if @array_indices
70
+ "#{parent}%5B#{index}%5D"
71
+ else
72
+ "#{parent}%5B%5D"
73
+ end
74
+ buffer << "#{encode_pair(new_parent, val)}&"
75
+ end
76
+ buffer.chop
77
+ end
78
+ end
79
+
80
+ # Sub-module for decoding query-string into parameters.
81
+ module DecodeMethods
82
+ # @param query [nil, String]
83
+ #
84
+ # @return [Array<Array, String>] the decoded params
85
+ #
86
+ # @raise [TypeError] if the nesting is incorrect
87
+ def decode(query)
88
+ return nil if query.nil?
89
+
90
+ params = {}
91
+ query.split('&').each do |pair|
92
+ next if pair.empty?
93
+
94
+ key, value = pair.split('=', 2)
95
+ key = unescape(key)
96
+ value = unescape(value.tr('+', ' ')) if value
97
+ decode_pair(key, value, params)
98
+ end
99
+
100
+ dehash(params, 0)
101
+ end
102
+
103
+ protected
104
+
105
+ SUBKEYS_REGEX = /[^\[\]]+(?:\]?\[\])?/.freeze
106
+
107
+ def decode_pair(key, value, context)
108
+ subkeys = key.scan(SUBKEYS_REGEX)
109
+ subkeys.each_with_index do |subkey, i|
110
+ is_array = subkey =~ /[\[\]]+\Z/
111
+ subkey = Regexp.last_match.pre_match if is_array
112
+ last_subkey = i == subkeys.length - 1
113
+
114
+ context = prepare_context(context, subkey, is_array, last_subkey)
115
+ add_to_context(is_array, context, value, subkey) if last_subkey
116
+ end
117
+ end
118
+
119
+ def prepare_context(context, subkey, is_array, last_subkey)
120
+ if !last_subkey || is_array
121
+ context = new_context(subkey, is_array, context)
122
+ end
123
+ if context.is_a?(Array) && !is_array
124
+ context = match_context(context, subkey)
125
+ end
126
+ context
127
+ end
128
+
129
+ def new_context(subkey, is_array, context)
130
+ value_type = is_array ? Array : Hash
131
+ if context[subkey] && !context[subkey].is_a?(value_type)
132
+ raise TypeError, "expected #{value_type.name} " \
133
+ "(got #{context[subkey].class.name}) for param `#{subkey}'"
134
+ end
135
+
136
+ context[subkey] ||= value_type.new
137
+ end
138
+
139
+ def match_context(context, subkey)
140
+ context << {} if !context.last.is_a?(Hash) || context.last.key?(subkey)
141
+ context.last
142
+ end
143
+
144
+ def add_to_context(is_array, context, value, subkey)
145
+ is_array ? context << value : context[subkey] = value
146
+ end
147
+
148
+ # Internal: convert a nested hash with purely numeric keys into an array.
149
+ # FIXME: this is not compatible with Rack::Utils.parse_nested_query
150
+ # @!visibility private
151
+ def dehash(hash, depth)
152
+ hash.each do |key, value|
153
+ hash[key] = dehash(value, depth + 1) if value.is_a?(Hash)
154
+ end
155
+
156
+ if depth.positive? && !hash.empty? && hash.keys.all? { |k| k =~ /^\d+$/ }
157
+ hash.sort.map(&:last)
158
+ else
159
+ hash
160
+ end
161
+ end
162
+ end
163
+
164
+ # This is the default encoder for Faraday requests.
165
+ # Using this encoder, parameters will be encoded respecting their structure,
166
+ # so you can send objects such as Arrays or Hashes as parameters
167
+ # for your requests.
168
+ module NestedParamsEncoder
169
+ class << self
170
+ attr_accessor :sort_params, :array_indices
171
+
172
+ extend Forwardable
173
+ def_delegators :'Faraday::Utils', :escape, :unescape
174
+ end
175
+
176
+ # Useful default for OAuth and caching.
177
+ @sort_params = true
178
+ @array_indices = false
179
+
180
+ extend EncodeMethods
181
+ extend DecodeMethods
182
+ end
183
+ end
@@ -0,0 +1,147 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Faraday namespace.
4
+ module Faraday
5
+ # Faraday error base class.
6
+ class Error < StandardError
7
+ attr_reader :response, :wrapped_exception
8
+
9
+ def initialize(exc = nil, response = nil)
10
+ @wrapped_exception = nil unless defined?(@wrapped_exception)
11
+ @response = nil unless defined?(@response)
12
+ super(exc_msg_and_response!(exc, response))
13
+ end
14
+
15
+ def backtrace
16
+ if @wrapped_exception
17
+ @wrapped_exception.backtrace
18
+ else
19
+ super
20
+ end
21
+ end
22
+
23
+ def inspect
24
+ inner = +''
25
+ inner << " wrapped=#{@wrapped_exception.inspect}" if @wrapped_exception
26
+ inner << " response=#{@response.inspect}" if @response
27
+ inner << " #{super}" if inner.empty?
28
+ %(#<#{self.class}#{inner}>)
29
+ end
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
+
43
+ protected
44
+
45
+ # Pulls out potential parent exception and response hash, storing them in
46
+ # instance variables.
47
+ # exc - Either an Exception, a string message, or a response hash.
48
+ # response - Hash
49
+ # :status - Optional integer HTTP response status
50
+ # :headers - String key/value hash of HTTP response header
51
+ # values.
52
+ # :body - Optional string HTTP response body.
53
+ # :request - Hash
54
+ # :method - Symbol with the request HTTP method.
55
+ # :url - URI object with the url requested.
56
+ # :url_path - String with the url path requested.
57
+ # :params - String key/value hash of query params
58
+ # present in the request.
59
+ # :headers - String key/value hash of HTTP request
60
+ # header values.
61
+ # :body - String HTTP request body.
62
+ #
63
+ # If a subclass has to call this, then it should pass a string message
64
+ # to `super`. See NilStatusError.
65
+ def exc_msg_and_response!(exc, response = nil)
66
+ if @response.nil? && @wrapped_exception.nil?
67
+ @wrapped_exception, msg, @response = exc_msg_and_response(exc, response)
68
+ return msg
69
+ end
70
+
71
+ exc.to_s
72
+ end
73
+
74
+ # Pulls out potential parent exception and response hash.
75
+ def exc_msg_and_response(exc, response = nil)
76
+ return [exc, exc.message, response] if exc.respond_to?(:backtrace)
77
+
78
+ return [nil, "the server responded with status #{exc[:status]}", exc] \
79
+ if exc.respond_to?(:each_key)
80
+
81
+ [nil, exc.to_s, response]
82
+ end
83
+ end
84
+
85
+ # Faraday client error class. Represents 4xx status responses.
86
+ class ClientError < Error
87
+ end
88
+
89
+ # Raised by Faraday::Response::RaiseError in case of a 400 response.
90
+ class BadRequestError < ClientError
91
+ end
92
+
93
+ # Raised by Faraday::Response::RaiseError in case of a 401 response.
94
+ class UnauthorizedError < ClientError
95
+ end
96
+
97
+ # Raised by Faraday::Response::RaiseError in case of a 403 response.
98
+ class ForbiddenError < ClientError
99
+ end
100
+
101
+ # Raised by Faraday::Response::RaiseError in case of a 404 response.
102
+ class ResourceNotFound < ClientError
103
+ end
104
+
105
+ # Raised by Faraday::Response::RaiseError in case of a 407 response.
106
+ class ProxyAuthError < ClientError
107
+ end
108
+
109
+ # Raised by Faraday::Response::RaiseError in case of a 409 response.
110
+ class ConflictError < ClientError
111
+ end
112
+
113
+ # Raised by Faraday::Response::RaiseError in case of a 422 response.
114
+ class UnprocessableEntityError < ClientError
115
+ end
116
+
117
+ # Faraday server error class. Represents 5xx status responses.
118
+ class ServerError < Error
119
+ end
120
+
121
+ # A unified client error for timeouts.
122
+ class TimeoutError < ServerError
123
+ def initialize(exc = 'timeout', response = nil)
124
+ super(exc, response)
125
+ end
126
+ end
127
+
128
+ # Raised by Faraday::Response::RaiseError in case of a nil status in response.
129
+ class NilStatusError < ServerError
130
+ def initialize(exc, response = nil)
131
+ exc_msg_and_response!(exc, response)
132
+ super('http status could not be derived from the server response')
133
+ end
134
+ end
135
+
136
+ # A unified error for failed connections.
137
+ class ConnectionFailed < Error
138
+ end
139
+
140
+ # A unified client error for SSL errors.
141
+ class SSLError < Error
142
+ end
143
+
144
+ # Raised by middlewares that parse the response, like the JSON response middleware.
145
+ class ParsingError < Error
146
+ end
147
+ end
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pp'
4
+
5
+ module Faraday
6
+ module Logging
7
+ # Serves as an integration point to customize logging
8
+ class Formatter
9
+ extend Forwardable
10
+
11
+ DEFAULT_OPTIONS = { headers: true, bodies: false,
12
+ log_level: :info }.freeze
13
+
14
+ def initialize(logger:, options:)
15
+ @logger = logger
16
+ @filter = []
17
+ @options = DEFAULT_OPTIONS.merge(options)
18
+ end
19
+
20
+ def_delegators :@logger, :debug, :info, :warn, :error, :fatal
21
+
22
+ def request(env)
23
+ request_log = proc do
24
+ "#{env.method.upcase} #{apply_filters(env.url.to_s)}"
25
+ end
26
+ public_send(log_level, 'request', &request_log)
27
+
28
+ log_headers('request', env.request_headers) if log_headers?(:request)
29
+ log_body('request', env[:body]) if env[:body] && log_body?(:request)
30
+ end
31
+
32
+ def response(env)
33
+ status = proc { "Status #{env.status}" }
34
+ public_send(log_level, 'response', &status)
35
+
36
+ log_headers('response', env.response_headers) if log_headers?(:response)
37
+ log_body('response', env[:body]) if env[:body] && log_body?(:response)
38
+ end
39
+
40
+ def filter(filter_word, filter_replacement)
41
+ @filter.push([filter_word, filter_replacement])
42
+ end
43
+
44
+ private
45
+
46
+ def dump_headers(headers)
47
+ headers.map { |k, v| "#{k}: #{v.inspect}" }.join("\n")
48
+ end
49
+
50
+ def dump_body(body)
51
+ if body.respond_to?(:to_str)
52
+ body.to_str
53
+ else
54
+ pretty_inspect(body)
55
+ end
56
+ end
57
+
58
+ def pretty_inspect(body)
59
+ body.pretty_inspect
60
+ end
61
+
62
+ def log_headers?(type)
63
+ case @options[:headers]
64
+ when Hash
65
+ @options[:headers][type]
66
+ else
67
+ @options[:headers]
68
+ end
69
+ end
70
+
71
+ def log_body?(type)
72
+ case @options[:bodies]
73
+ when Hash
74
+ @options[:bodies][type]
75
+ else
76
+ @options[:bodies]
77
+ end
78
+ end
79
+
80
+ def apply_filters(output)
81
+ @filter.each do |pattern, replacement|
82
+ output = output.to_s.gsub(pattern, replacement)
83
+ end
84
+ output
85
+ end
86
+
87
+ def log_level
88
+ unless %i[debug info warn error fatal].include?(@options[:log_level])
89
+ return :info
90
+ end
91
+
92
+ @options[:log_level]
93
+ end
94
+
95
+ def log_headers(type, headers)
96
+ headers_log = proc { apply_filters(dump_headers(headers)) }
97
+ public_send(log_level, type, &headers_log)
98
+ end
99
+
100
+ def log_body(type, body)
101
+ body_log = proc { apply_filters(dump_body(body)) }
102
+ public_send(log_level, type, &body_log)
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ METHODS_WITH_QUERY = %w[get head delete trace].freeze
5
+ METHODS_WITH_BODY = %w[post put patch].freeze
6
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ # Middleware is the basic base class of any Faraday middleware.
5
+ class Middleware
6
+ extend MiddlewareRegistry
7
+
8
+ attr_reader :app, :options
9
+
10
+ def initialize(app = nil, options = {})
11
+ @app = app
12
+ @options = options
13
+ end
14
+
15
+ def call(env)
16
+ on_request(env) if respond_to?(:on_request)
17
+ app.call(env).on_complete do |environment|
18
+ on_complete(environment) if respond_to?(:on_complete)
19
+ end
20
+ end
21
+
22
+ def close
23
+ if app.respond_to?(:close)
24
+ app.close
25
+ else
26
+ warn "#{app} does not implement \#close!"
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'monitor'
4
+
5
+ module Faraday
6
+ # Adds the ability for other modules to register and lookup
7
+ # middleware classes.
8
+ module MiddlewareRegistry
9
+ def registered_middleware
10
+ @registered_middleware ||= {}
11
+ end
12
+
13
+ # Register middleware class(es) on the current module.
14
+ #
15
+ # @param mappings [Hash] Middleware mappings from a lookup symbol to a middleware class.
16
+ # @return [void]
17
+ #
18
+ # @example Lookup by a constant
19
+ #
20
+ # module Faraday
21
+ # class Whatever < Middleware
22
+ # # Middleware looked up by :foo returns Faraday::Whatever::Foo.
23
+ # register_middleware(foo: Whatever)
24
+ # end
25
+ # end
26
+ def register_middleware(**mappings)
27
+ middleware_mutex do
28
+ registered_middleware.update(mappings)
29
+ end
30
+ end
31
+
32
+ # Unregister a previously registered middleware class.
33
+ #
34
+ # @param key [Symbol] key for the registered middleware.
35
+ def unregister_middleware(key)
36
+ registered_middleware.delete(key)
37
+ end
38
+
39
+ # Lookup middleware class with a registered Symbol shortcut.
40
+ #
41
+ # @param key [Symbol] key for the registered middleware.
42
+ # @return [Class] a middleware Class.
43
+ # @raise [Faraday::Error] if given key is not registered
44
+ #
45
+ # @example
46
+ #
47
+ # module Faraday
48
+ # class Whatever < Middleware
49
+ # register_middleware(foo: Whatever)
50
+ # end
51
+ # end
52
+ #
53
+ # Faraday::Middleware.lookup_middleware(:foo)
54
+ # # => Faraday::Whatever
55
+ def lookup_middleware(key)
56
+ load_middleware(key) ||
57
+ raise(Faraday::Error, "#{key.inspect} is not registered on #{self}")
58
+ end
59
+
60
+ private
61
+
62
+ def middleware_mutex(&block)
63
+ @middleware_mutex ||= Monitor.new
64
+ @middleware_mutex.synchronize(&block)
65
+ end
66
+
67
+ def load_middleware(key)
68
+ value = registered_middleware[key]
69
+ case value
70
+ when Module
71
+ value
72
+ when Symbol, String
73
+ middleware_mutex do
74
+ @registered_middleware[key] = const_get(value)
75
+ end
76
+ when Proc
77
+ middleware_mutex do
78
+ @registered_middleware[key] = value.call
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ # ConnectionOptions contains the configurable properties for a Faraday
5
+ # connection object.
6
+ class ConnectionOptions < Options.new(:request, :proxy, :ssl, :builder, :url,
7
+ :parallel_manager, :params, :headers,
8
+ :builder_class)
9
+
10
+ options request: RequestOptions, ssl: SSLOptions
11
+
12
+ memoized(:request) { self.class.options_for(:request).new }
13
+
14
+ memoized(:ssl) { self.class.options_for(:ssl).new }
15
+
16
+ memoized(:builder_class) { RackBuilder }
17
+
18
+ def new_builder(block)
19
+ builder_class.new(&block)
20
+ end
21
+ end
22
+ end