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.
- checksums.yaml +4 -4
- data/agent/config.rb +6 -6
- data/agent/dependencies/faraday-0.17.0/LICENSE.md +20 -0
- data/agent/dependencies/faraday-0.17.0/README.md +384 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday.rb +248 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter.rb +55 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/em_http.rb +243 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/em_synchrony.rb +106 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/em_synchrony/parallel_manager.rb +66 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/excon.rb +82 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/httpclient.rb +128 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/net_http.rb +152 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/net_http_persistent.rb +68 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/patron.rb +95 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/rack.rb +58 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/sl_em_http_ssl_patch.rb +56 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/test.rb +213 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/adapter/typhoeus.rb +12 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/autoload.rb +84 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/connection.rb +484 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/error.rb +66 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/middleware.rb +37 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/options.rb +373 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/parameters.rb +198 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/rack_builder.rb +237 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/request.rb +114 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/request/authorization.rb +41 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/request/basic_authentication.rb +13 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/request/instrumentation.rb +36 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/request/multipart.rb +68 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/request/retry.rb +212 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/request/token_authentication.rb +15 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/request/url_encoded.rb +36 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/response.rb +97 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/response/logger.rb +80 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/response/raise_error.rb +21 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/upload_io.rb +67 -0
- data/agent/dependencies/faraday-0.17.0/lib/faraday/utils.rb +326 -0
- data/agent/dependencies/jwt-2.2.1/AUTHORS +84 -0
- data/agent/dependencies/jwt-2.2.1/Appraisals +14 -0
- data/agent/dependencies/jwt-2.2.1/CHANGELOG.md +570 -0
- data/agent/dependencies/jwt-2.2.1/Gemfile +3 -0
- data/agent/dependencies/jwt-2.2.1/LICENSE +7 -0
- data/agent/dependencies/jwt-2.2.1/README.md +489 -0
- data/agent/dependencies/jwt-2.2.1/Rakefile +11 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt.rb +30 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/ecdsa.rb +35 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/eddsa.rb +23 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/hmac.rb +33 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/ps.rb +43 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/rsa.rb +19 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/algos/unsupported.rb +16 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/base64.rb +19 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/claims_validator.rb +33 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/decode.rb +100 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/default_options.rb +15 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/encode.rb +68 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/error.rb +20 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/json.rb +18 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/jwk.rb +31 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/jwk/key_finder.rb +57 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/jwk/rsa.rb +47 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/security_utils.rb +57 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/signature.rb +52 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/verify.rb +98 -0
- data/agent/dependencies/jwt-2.2.1/lib/jwt/version.rb +24 -0
- data/agent/dependencies/jwt-2.2.1/ruby-jwt.gemspec +34 -0
- data/agent/dependencies/multipart-post-2.1.1/Gemfile +6 -0
- data/agent/dependencies/multipart-post-2.1.1/History.txt +64 -0
- data/agent/dependencies/multipart-post-2.1.1/LICENSE +21 -0
- data/agent/dependencies/multipart-post-2.1.1/Manifest.txt +9 -0
- data/agent/dependencies/multipart-post-2.1.1/README.md +127 -0
- data/agent/dependencies/multipart-post-2.1.1/Rakefile +6 -0
- data/agent/dependencies/multipart-post-2.1.1/lib/composite_io.rb +108 -0
- data/agent/dependencies/multipart-post-2.1.1/lib/multipart_post.rb +9 -0
- data/agent/dependencies/multipart-post-2.1.1/lib/multipartable.rb +48 -0
- data/agent/dependencies/multipart-post-2.1.1/lib/net/http/post/multipart.rb +28 -0
- data/agent/dependencies/multipart-post-2.1.1/lib/parts.rb +126 -0
- data/agent/dependencies/multipart-post-2.1.1/multipart-post.gemspec +23 -0
- data/agent/http_client.rb +46 -0
- data/agent/listener.rb +1 -1
- data/agent/sealights-rspec-agent.rb +2 -2
- data/agent/tia.rb +5 -1
- metadata +80 -3
- 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
|