sealights-rspec-agent 2.0.4 → 2.0.5

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/agent/config.rb +6 -6
  3. data/agent/dependencies/faraday-0.17.0/LICENSE.md +20 -0
  4. data/agent/dependencies/faraday-0.17.0/README.md +384 -0
  5. data/agent/dependencies/faraday-0.17.0/lib/faraday.rb +248 -0
  6. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter.rb +55 -0
  7. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/em_http.rb +243 -0
  8. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/em_synchrony.rb +106 -0
  9. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/em_synchrony/parallel_manager.rb +66 -0
  10. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/excon.rb +82 -0
  11. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/httpclient.rb +128 -0
  12. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/net_http.rb +152 -0
  13. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/net_http_persistent.rb +68 -0
  14. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/patron.rb +95 -0
  15. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/rack.rb +58 -0
  16. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/sl_em_http_ssl_patch.rb +56 -0
  17. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/test.rb +213 -0
  18. data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/typhoeus.rb +12 -0
  19. data/agent/dependencies/faraday-0.17.0/lib/faraday/autoload.rb +84 -0
  20. data/agent/dependencies/faraday-0.17.0/lib/faraday/connection.rb +484 -0
  21. data/agent/dependencies/faraday-0.17.0/lib/faraday/error.rb +66 -0
  22. data/agent/dependencies/faraday-0.17.0/lib/faraday/middleware.rb +37 -0
  23. data/agent/dependencies/faraday-0.17.0/lib/faraday/options.rb +373 -0
  24. data/agent/dependencies/faraday-0.17.0/lib/faraday/parameters.rb +198 -0
  25. data/agent/dependencies/faraday-0.17.0/lib/faraday/rack_builder.rb +237 -0
  26. data/agent/dependencies/faraday-0.17.0/lib/faraday/request.rb +114 -0
  27. data/agent/dependencies/faraday-0.17.0/lib/faraday/request/authorization.rb +41 -0
  28. data/agent/dependencies/faraday-0.17.0/lib/faraday/request/basic_authentication.rb +13 -0
  29. data/agent/dependencies/faraday-0.17.0/lib/faraday/request/instrumentation.rb +36 -0
  30. data/agent/dependencies/faraday-0.17.0/lib/faraday/request/multipart.rb +68 -0
  31. data/agent/dependencies/faraday-0.17.0/lib/faraday/request/retry.rb +212 -0
  32. data/agent/dependencies/faraday-0.17.0/lib/faraday/request/token_authentication.rb +15 -0
  33. data/agent/dependencies/faraday-0.17.0/lib/faraday/request/url_encoded.rb +36 -0
  34. data/agent/dependencies/faraday-0.17.0/lib/faraday/response.rb +97 -0
  35. data/agent/dependencies/faraday-0.17.0/lib/faraday/response/logger.rb +80 -0
  36. data/agent/dependencies/faraday-0.17.0/lib/faraday/response/raise_error.rb +21 -0
  37. data/agent/dependencies/faraday-0.17.0/lib/faraday/upload_io.rb +67 -0
  38. data/agent/dependencies/faraday-0.17.0/lib/faraday/utils.rb +326 -0
  39. data/agent/dependencies/jwt-2.2.1/AUTHORS +84 -0
  40. data/agent/dependencies/jwt-2.2.1/Appraisals +14 -0
  41. data/agent/dependencies/jwt-2.2.1/CHANGELOG.md +570 -0
  42. data/agent/dependencies/jwt-2.2.1/Gemfile +3 -0
  43. data/agent/dependencies/jwt-2.2.1/LICENSE +7 -0
  44. data/agent/dependencies/jwt-2.2.1/README.md +489 -0
  45. data/agent/dependencies/jwt-2.2.1/Rakefile +11 -0
  46. data/agent/dependencies/jwt-2.2.1/lib/jwt.rb +30 -0
  47. data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/ecdsa.rb +35 -0
  48. data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/eddsa.rb +23 -0
  49. data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/hmac.rb +33 -0
  50. data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/ps.rb +43 -0
  51. data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/rsa.rb +19 -0
  52. data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/unsupported.rb +16 -0
  53. data/agent/dependencies/jwt-2.2.1/lib/jwt/base64.rb +19 -0
  54. data/agent/dependencies/jwt-2.2.1/lib/jwt/claims_validator.rb +33 -0
  55. data/agent/dependencies/jwt-2.2.1/lib/jwt/decode.rb +100 -0
  56. data/agent/dependencies/jwt-2.2.1/lib/jwt/default_options.rb +15 -0
  57. data/agent/dependencies/jwt-2.2.1/lib/jwt/encode.rb +68 -0
  58. data/agent/dependencies/jwt-2.2.1/lib/jwt/error.rb +20 -0
  59. data/agent/dependencies/jwt-2.2.1/lib/jwt/json.rb +18 -0
  60. data/agent/dependencies/jwt-2.2.1/lib/jwt/jwk.rb +31 -0
  61. data/agent/dependencies/jwt-2.2.1/lib/jwt/jwk/key_finder.rb +57 -0
  62. data/agent/dependencies/jwt-2.2.1/lib/jwt/jwk/rsa.rb +47 -0
  63. data/agent/dependencies/jwt-2.2.1/lib/jwt/security_utils.rb +57 -0
  64. data/agent/dependencies/jwt-2.2.1/lib/jwt/signature.rb +52 -0
  65. data/agent/dependencies/jwt-2.2.1/lib/jwt/verify.rb +98 -0
  66. data/agent/dependencies/jwt-2.2.1/lib/jwt/version.rb +24 -0
  67. data/agent/dependencies/jwt-2.2.1/ruby-jwt.gemspec +34 -0
  68. data/agent/dependencies/multipart-post-2.1.1/Gemfile +6 -0
  69. data/agent/dependencies/multipart-post-2.1.1/History.txt +64 -0
  70. data/agent/dependencies/multipart-post-2.1.1/LICENSE +21 -0
  71. data/agent/dependencies/multipart-post-2.1.1/Manifest.txt +9 -0
  72. data/agent/dependencies/multipart-post-2.1.1/README.md +127 -0
  73. data/agent/dependencies/multipart-post-2.1.1/Rakefile +6 -0
  74. data/agent/dependencies/multipart-post-2.1.1/lib/composite_io.rb +108 -0
  75. data/agent/dependencies/multipart-post-2.1.1/lib/multipart_post.rb +9 -0
  76. data/agent/dependencies/multipart-post-2.1.1/lib/multipartable.rb +48 -0
  77. data/agent/dependencies/multipart-post-2.1.1/lib/net/http/post/multipart.rb +28 -0
  78. data/agent/dependencies/multipart-post-2.1.1/lib/parts.rb +126 -0
  79. data/agent/dependencies/multipart-post-2.1.1/multipart-post.gemspec +23 -0
  80. data/agent/http_client.rb +46 -0
  81. data/agent/listener.rb +1 -1
  82. data/agent/sealights-rspec-agent.rb +2 -2
  83. data/agent/tia.rb +5 -1
  84. metadata +80 -3
  85. data/agent/rest-client-wrapper.rb +0 -27
@@ -0,0 +1,12 @@
1
+ module SLFaraday
2
+ class Adapter
3
+ # This class is just a stub, the real adapter is in https://github.com/philsturgeon/typhoeus/blob/master/lib/typhoeus/adapters/faraday.rb
4
+ class Typhoeus < SLFaraday::Adapter
5
+ # Needs to define this method in order to support Typhoeus <= 1.3.0
6
+ def call; end
7
+
8
+ dependency 'typhoeus'
9
+ dependency 'typhoeus/adapters/faraday'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,84 @@
1
+ module SLFaraday
2
+ # Internal: Adds the ability for other modules to manage autoloadable
3
+ # constants.
4
+ module AutoloadHelper
5
+ # Internal: Registers the constants to be auto loaded.
6
+ #
7
+ # prefix - The String require prefix. If the path is inside Faraday, then
8
+ # it will be prefixed with the root path of this loaded Faraday
9
+ # version.
10
+ # options - Hash of Symbol => String library names.
11
+ #
12
+ # Examples.
13
+ #
14
+ # Faraday.autoload_all 'faraday/foo',
15
+ # :Bar => 'bar'
16
+ #
17
+ # # requires faraday/foo/bar to load Faraday::Bar.
18
+ # Faraday::Bar
19
+ #
20
+ #
21
+ # Returns nothing.
22
+ def autoload_all(prefix, options)
23
+ if prefix =~ /^faraday(\/|$)/i
24
+ prefix = File.join(SLFaraday.root_path, prefix)
25
+ end
26
+ options.each do |const_name, path|
27
+ autoload const_name, File.join(prefix, path)
28
+ end
29
+ end
30
+
31
+ # Internal: Loads each autoloaded constant. If thread safety is a concern,
32
+ # wrap this in a Mutex.
33
+ #
34
+ # Returns nothing.
35
+ def load_autoloaded_constants
36
+ constants.each do |const|
37
+ const_get(const) if autoload?(const)
38
+ end
39
+ end
40
+
41
+ # Internal: Filters the module's contents with those that have been already
42
+ # autoloaded.
43
+ #
44
+ # Returns an Array of Class/Module objects.
45
+ def all_loaded_constants
46
+ constants.map { |c| const_get(c) }.
47
+ select { |a| a.respond_to?(:loaded?) && a.loaded? }
48
+ end
49
+ end
50
+
51
+ class Adapter
52
+ extend AutoloadHelper
53
+ autoload_all 'faraday/adapter',
54
+ :NetHttp => 'net_http',
55
+ :NetHttpPersistent => 'net_http_persistent',
56
+ :EMSynchrony => 'em_synchrony',
57
+ :EMHttp => 'em_http',
58
+ :Typhoeus => 'typhoeus',
59
+ :Patron => 'patron',
60
+ :Excon => 'excon',
61
+ :Test => 'test',
62
+ :Rack => 'rack',
63
+ :HTTPClient => 'httpclient'
64
+ end
65
+
66
+ class Request
67
+ extend AutoloadHelper
68
+ autoload_all 'faraday/request',
69
+ :UrlEncoded => 'url_encoded',
70
+ :Multipart => 'multipart',
71
+ :Retry => 'retry',
72
+ :Authorization => 'authorization',
73
+ :BasicAuthentication => 'basic_authentication',
74
+ :TokenAuthentication => 'token_authentication',
75
+ :Instrumentation => 'instrumentation'
76
+ end
77
+
78
+ class Response
79
+ extend AutoloadHelper
80
+ autoload_all 'faraday/response',
81
+ :RaiseError => 'raise_error',
82
+ :Logger => 'logger'
83
+ end
84
+ end
@@ -0,0 +1,484 @@
1
+ module SLFaraday
2
+ # Public: Connection objects manage the default properties and the middleware
3
+ # stack for fulfilling an HTTP request.
4
+ #
5
+ # Examples
6
+ #
7
+ # conn = Faraday::Connection.new 'http://sushi.com'
8
+ #
9
+ # # GET http://sushi.com/nigiri
10
+ # conn.get 'nigiri'
11
+ # # => #<Faraday::Response>
12
+ #
13
+ class Connection
14
+ # A Set of allowed HTTP verbs.
15
+ METHODS = Set.new [:get, :post, :put, :delete, :head, :patch, :options]
16
+
17
+ # Public: Returns a Hash of URI query unencoded key/value pairs.
18
+ attr_reader :params
19
+
20
+ # Public: Returns a Hash of unencoded HTTP header key/value pairs.
21
+ attr_reader :headers
22
+
23
+ # Public: Returns a URI with the prefix used for all requests from this
24
+ # Connection. This includes a default host name, scheme, port, and path.
25
+ attr_reader :url_prefix
26
+
27
+ # Public: Returns the Faraday::Builder for this Connection.
28
+ attr_reader :builder
29
+
30
+ # Public: Returns a Hash of the request options.
31
+ attr_reader :options
32
+
33
+ # Public: Returns a Hash of the SSL options.
34
+ attr_reader :ssl
35
+
36
+ # Public: Returns the parallel manager for this Connection.
37
+ attr_reader :parallel_manager
38
+
39
+ # Public: Sets the default parallel manager for this connection.
40
+ attr_writer :default_parallel_manager
41
+
42
+ # Public: Gets or Sets the Hash proxy options.
43
+ # attr_reader :proxy
44
+
45
+ # Public: Initializes a new Faraday::Connection.
46
+ #
47
+ # url - URI or String base URL to use as a prefix for all
48
+ # requests (optional).
49
+ # options - Hash or Faraday::ConnectionOptions.
50
+ # :url - URI or String base URL (default: "http:/").
51
+ # :params - Hash of URI query unencoded key/value pairs.
52
+ # :headers - Hash of unencoded HTTP header key/value pairs.
53
+ # :request - Hash of request options.
54
+ # :ssl - Hash of SSL options.
55
+ # :proxy - URI, String or Hash of HTTP proxy options
56
+ # (default: "http_proxy" environment variable).
57
+ # :uri - URI or String
58
+ # :user - String (optional)
59
+ # :password - String (optional)
60
+ def initialize(url = nil, options = nil)
61
+ options = ConnectionOptions.from(options)
62
+
63
+ if url.is_a?(Hash) || url.is_a?(ConnectionOptions)
64
+ options = options.merge(url)
65
+ url = options.url
66
+ end
67
+
68
+ @parallel_manager = nil
69
+ @headers = Utils::Headers.new
70
+ @params = Utils::ParamsHash.new
71
+ @options = options.request
72
+ @ssl = options.ssl
73
+ @default_parallel_manager = options.parallel_manager
74
+
75
+ @builder = options.builder || begin
76
+ # pass an empty block to Builder so it doesn't assume default middleware
77
+ options.new_builder(block_given? ? Proc.new { |b| } : nil)
78
+ end
79
+
80
+ self.url_prefix = url || 'http:/'
81
+
82
+ @params.update(options.params) if options.params
83
+ @headers.update(options.headers) if options.headers
84
+
85
+ @manual_proxy = !!options.proxy
86
+ @proxy = options.proxy ? ProxyOptions.from(options.proxy) : proxy_from_env(url)
87
+ @temp_proxy = @proxy
88
+
89
+ yield(self) if block_given?
90
+
91
+ @headers[:user_agent] ||= "Faraday v#{VERSION}"
92
+ end
93
+
94
+ # Public: Sets the Hash of URI query unencoded key/value pairs.
95
+ def params=(hash)
96
+ @params.replace hash
97
+ end
98
+
99
+ # Public: Sets the Hash of unencoded HTTP header key/value pairs.
100
+ def headers=(hash)
101
+ @headers.replace hash
102
+ end
103
+
104
+ extend Forwardable
105
+
106
+ def_delegators :builder, :build, :use, :request, :response, :adapter, :app
107
+
108
+ # Public: Makes an HTTP request without a body.
109
+ #
110
+ # url - The optional String base URL to use as a prefix for all
111
+ # requests. Can also be the options Hash.
112
+ # params - Hash of URI query unencoded key/value pairs.
113
+ # headers - Hash of unencoded HTTP header key/value pairs.
114
+ #
115
+ # Examples
116
+ #
117
+ # conn.get '/items', {:page => 1}, :accept => 'application/json'
118
+ # conn.head '/items/1'
119
+ #
120
+ # # ElasticSearch example sending a body with GET.
121
+ # conn.get '/twitter/tweet/_search' do |req|
122
+ # req.headers[:content_type] = 'application/json'
123
+ # req.params[:routing] = 'kimchy'
124
+ # req.body = JSON.generate(:query => {...})
125
+ # end
126
+ #
127
+ # Yields a Faraday::Request for further request customizations.
128
+ # Returns a Faraday::Response.
129
+ #
130
+ # Signature
131
+ #
132
+ # <verb>(url = nil, params = nil, headers = nil)
133
+ #
134
+ # verb - An HTTP verb: get, head, or delete.
135
+ %w[get head delete].each do |method|
136
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
137
+ def #{method}(url = nil, params = nil, headers = nil)
138
+ run_request(:#{method}, url, nil, headers) { |request|
139
+ request.params.update(params) if params
140
+ yield(request) if block_given?
141
+ }
142
+ end
143
+ RUBY
144
+ end
145
+
146
+ # Public: Makes an HTTP request with a body.
147
+ #
148
+ # url - The optional String base URL to use as a prefix for all
149
+ # requests. Can also be the options Hash.
150
+ # body - The String body for the request.
151
+ # headers - Hash of unencoded HTTP header key/value pairs.
152
+ #
153
+ # Examples
154
+ #
155
+ # conn.post '/items', data, :content_type => 'application/json'
156
+ #
157
+ # # Simple ElasticSearch indexing sample.
158
+ # conn.post '/twitter/tweet' do |req|
159
+ # req.headers[:content_type] = 'application/json'
160
+ # req.params[:routing] = 'kimchy'
161
+ # req.body = JSON.generate(:user => 'kimchy', ...)
162
+ # end
163
+ #
164
+ # Yields a Faraday::Request for further request customizations.
165
+ # Returns a Faraday::Response.
166
+ #
167
+ # Signature
168
+ #
169
+ # <verb>(url = nil, body = nil, headers = nil)
170
+ #
171
+ # verb - An HTTP verb: post, put, or patch.
172
+ %w[post put patch].each do |method|
173
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
174
+ def #{method}(url = nil, body = nil, headers = nil, &block)
175
+ run_request(:#{method}, url, body, headers, &block)
176
+ end
177
+ RUBY
178
+ end
179
+
180
+ # Public: Sets up the Authorization header with these credentials, encoded
181
+ # with base64.
182
+ #
183
+ # login - The authentication login.
184
+ # pass - The authentication password.
185
+ #
186
+ # Examples
187
+ #
188
+ # conn.basic_auth 'Aladdin', 'open sesame'
189
+ # conn.headers['Authorization']
190
+ # # => "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
191
+ #
192
+ # Returns nothing.
193
+ def basic_auth(login, pass)
194
+ set_authorization_header(:basic_auth, login, pass)
195
+ end
196
+
197
+ # Public: Sets up the Authorization header with the given token.
198
+ #
199
+ # token - The String token.
200
+ # options - Optional Hash of extra token options.
201
+ #
202
+ # Examples
203
+ #
204
+ # conn.token_auth 'abcdef', :foo => 'bar'
205
+ # conn.headers['Authorization']
206
+ # # => "Token token=\"abcdef\",
207
+ # foo=\"bar\""
208
+ #
209
+ # Returns nothing.
210
+ def token_auth(token, options = nil)
211
+ set_authorization_header(:token_auth, token, options)
212
+ end
213
+
214
+ # Public: Sets up a custom Authorization header.
215
+ #
216
+ # type - The String authorization type.
217
+ # token - The String or Hash token. A String value is taken literally, and
218
+ # a Hash is encoded into comma separated key/value pairs.
219
+ #
220
+ # Examples
221
+ #
222
+ # conn.authorization :Bearer, 'mF_9.B5f-4.1JqM'
223
+ # conn.headers['Authorization']
224
+ # # => "Bearer mF_9.B5f-4.1JqM"
225
+ #
226
+ # conn.authorization :Token, :token => 'abcdef', :foo => 'bar'
227
+ # conn.headers['Authorization']
228
+ # # => "Token token=\"abcdef\",
229
+ # foo=\"bar\""
230
+ #
231
+ # Returns nothing.
232
+ def authorization(type, token)
233
+ set_authorization_header(:authorization, type, token)
234
+ end
235
+
236
+ # Internal: Traverse the middleware stack in search of a
237
+ # parallel-capable adapter.
238
+ #
239
+ # Yields in case of not found.
240
+ #
241
+ # Returns a parallel manager or nil if not found.
242
+ def default_parallel_manager
243
+ @default_parallel_manager ||= begin
244
+ handler = @builder.handlers.detect do |h|
245
+ h.klass.respond_to?(:supports_parallel?) and h.klass.supports_parallel?
246
+ end
247
+
248
+ if handler
249
+ handler.klass.setup_parallel_manager
250
+ elsif block_given?
251
+ yield
252
+ end
253
+ end
254
+ end
255
+
256
+ # Public: Determine if this Faraday::Connection can make parallel requests.
257
+ #
258
+ # Returns true or false.
259
+ def in_parallel?
260
+ !!@parallel_manager
261
+ end
262
+
263
+ # Public: Sets up the parallel manager to make a set of requests.
264
+ #
265
+ # manager - The parallel manager that this Connection's Adapter uses.
266
+ #
267
+ # Yields a block to execute multiple requests.
268
+ # Returns nothing.
269
+ def in_parallel(manager = nil)
270
+ @parallel_manager = manager || default_parallel_manager {
271
+ warn "Warning: `in_parallel` called but no parallel-capable adapter on Faraday stack"
272
+ warn caller[2,10].join("\n")
273
+ nil
274
+ }
275
+ yield
276
+ @parallel_manager && @parallel_manager.run
277
+ ensure
278
+ @parallel_manager = nil
279
+ end
280
+
281
+ # Public: Gets or Sets the Hash proxy options.
282
+ def proxy(arg = nil)
283
+ return @proxy if arg.nil?
284
+ warn 'Warning: use of proxy(new_value) to set connection proxy have been DEPRECATED and will be removed in Faraday 1.0'
285
+ @manual_proxy = true
286
+ @proxy = ProxyOptions.from(arg)
287
+ end
288
+
289
+ # Public: Sets the Hash proxy options.
290
+ def proxy=(new_value)
291
+ @manual_proxy = true
292
+ @proxy = new_value ? ProxyOptions.from(new_value) : nil
293
+ end
294
+
295
+ def_delegators :url_prefix, :scheme, :scheme=, :host, :host=, :port, :port=
296
+ def_delegator :url_prefix, :path, :path_prefix
297
+
298
+ # Public: Parses the giving url with URI and stores the individual
299
+ # components in this connection. These components serve as defaults for
300
+ # requests made by this connection.
301
+ #
302
+ # url - A String or URI.
303
+ #
304
+ # Examples
305
+ #
306
+ # conn = Faraday::Connection.new { ... }
307
+ # conn.url_prefix = "https://sushi.com/api"
308
+ # conn.scheme # => https
309
+ # conn.path_prefix # => "/api"
310
+ #
311
+ # conn.get("nigiri?page=2") # accesses https://sushi.com/api/nigiri
312
+ #
313
+ # Returns the parsed URI from the given input..
314
+ def url_prefix=(url, encoder = nil)
315
+ uri = @url_prefix = Utils.URI(url)
316
+ self.path_prefix = uri.path
317
+
318
+ params.merge_query(uri.query, encoder)
319
+ uri.query = nil
320
+
321
+ with_uri_credentials(uri) do |user, password|
322
+ basic_auth user, password
323
+ uri.user = uri.password = nil
324
+ end
325
+
326
+ uri
327
+ end
328
+
329
+ # Public: Sets the path prefix and ensures that it always has a leading
330
+ # slash.
331
+ #
332
+ # value - A String.
333
+ #
334
+ # Returns the new String path prefix.
335
+ def path_prefix=(value)
336
+ url_prefix.path = if value
337
+ value = '/' + value unless value[0,1] == '/'
338
+ value
339
+ end
340
+ end
341
+
342
+ # Public: Takes a relative url for a request and combines it with the defaults
343
+ # set on the connection instance.
344
+ #
345
+ # conn = Faraday::Connection.new { ... }
346
+ # conn.url_prefix = "https://sushi.com/api?token=abc"
347
+ # conn.scheme # => https
348
+ # conn.path_prefix # => "/api"
349
+ #
350
+ # conn.build_url("nigiri?page=2") # => https://sushi.com/api/nigiri?token=abc&page=2
351
+ # conn.build_url("nigiri", :page => 2) # => https://sushi.com/api/nigiri?token=abc&page=2
352
+ #
353
+ def build_url(url = nil, extra_params = nil)
354
+ uri = build_exclusive_url(url)
355
+
356
+ query_values = params.dup.merge_query(uri.query, options.params_encoder)
357
+ query_values.update extra_params if extra_params
358
+ uri.query = query_values.empty? ? nil : query_values.to_query(options.params_encoder)
359
+
360
+ uri
361
+ end
362
+
363
+ # Builds and runs the Faraday::Request.
364
+ #
365
+ # method - The Symbol HTTP method.
366
+ # url - The String or URI to access.
367
+ # body - The request body that will eventually be converted to a string.
368
+ # headers - Hash of unencoded HTTP header key/value pairs.
369
+ #
370
+ # Returns a Faraday::Response.
371
+ def run_request(method, url, body, headers)
372
+ if !METHODS.include?(method)
373
+ raise ArgumentError, "unknown http method: #{method}"
374
+ end
375
+
376
+ # Resets temp_proxy
377
+ @temp_proxy = proxy_for_request(url)
378
+
379
+ request = build_request(method) do |req|
380
+ req.options = req.options.merge(:proxy => @temp_proxy)
381
+ req.url(url) if url
382
+ req.headers.update(headers) if headers
383
+ req.body = body if body
384
+ yield(req) if block_given?
385
+ end
386
+
387
+ builder.build_response(self, request)
388
+ end
389
+
390
+ # Creates and configures the request object.
391
+ #
392
+ # Returns the new Request.
393
+ def build_request(method)
394
+ Request.create(method) do |req|
395
+ req.params = self.params.dup
396
+ req.headers = self.headers.dup
397
+ req.options = self.options
398
+ yield(req) if block_given?
399
+ end
400
+ end
401
+
402
+ # Internal: Build an absolute URL based on url_prefix.
403
+ #
404
+ # url - A String or URI-like object
405
+ # params - A Faraday::Utils::ParamsHash to replace the query values
406
+ # of the resulting url (default: nil).
407
+ #
408
+ # Returns the resulting URI instance.
409
+ def build_exclusive_url(url = nil, params = nil, params_encoder = nil)
410
+ url = nil if url.respond_to?(:empty?) and url.empty?
411
+ base = url_prefix
412
+ if url and base.path and base.path !~ /\/$/
413
+ base = base.dup
414
+ base.path = base.path + '/' # ensure trailing slash
415
+ end
416
+ uri = url ? base + url : base
417
+ uri.query = params.to_query(params_encoder || options.params_encoder) if params
418
+ uri.query = nil if uri.query and uri.query.empty?
419
+ uri
420
+ end
421
+
422
+ # Internal: Creates a duplicate of this Faraday::Connection.
423
+ #
424
+ # Returns a Faraday::Connection.
425
+ def dup
426
+ self.class.new(build_exclusive_url,
427
+ :headers => headers.dup,
428
+ :params => params.dup,
429
+ :builder => builder.dup,
430
+ :ssl => ssl.dup,
431
+ :request => options.dup)
432
+ end
433
+
434
+ # Internal: Yields username and password extracted from a URI if they both exist.
435
+ def with_uri_credentials(uri)
436
+ if uri.user and uri.password
437
+ yield(Utils.unescape(uri.user), Utils.unescape(uri.password))
438
+ end
439
+ end
440
+
441
+ def set_authorization_header(header_type, *args)
442
+ header = SLFaraday::Request.lookup_middleware(header_type).
443
+ header(*args)
444
+ headers[SLFaraday::Request::Authorization::KEY] = header
445
+ end
446
+
447
+ def proxy_from_env(url)
448
+ return if SLFaraday.ignore_env_proxy
449
+ uri = nil
450
+ if URI.parse('').respond_to?(:find_proxy)
451
+ case url
452
+ when String
453
+ uri = Utils.URI(url)
454
+ uri = URI.parse("#{uri.scheme}://#{uri.hostname}").find_proxy
455
+ when URI
456
+ uri = url.find_proxy
457
+ when nil
458
+ uri = find_default_proxy
459
+ end
460
+ else
461
+ warn 'no_proxy is unsupported' if ENV['no_proxy'] || ENV['NO_PROXY']
462
+ uri = find_default_proxy
463
+ end
464
+ ProxyOptions.from(uri) if uri
465
+ end
466
+
467
+ def find_default_proxy
468
+ uri = ENV['http_proxy']
469
+ if uri && !uri.empty?
470
+ uri = 'http://' + uri if uri !~ /^http/i
471
+ uri
472
+ end
473
+ end
474
+
475
+ def proxy_for_request(url)
476
+ return self.proxy if @manual_proxy
477
+ if url && Utils.URI(url).absolute?
478
+ proxy_from_env(url)
479
+ else
480
+ self.proxy
481
+ end
482
+ end
483
+ end
484
+ end