Class: Faraday::Connection
- Inherits:
-
Object
- Object
- Faraday::Connection
- Extended by:
- Forwardable
- Defined in:
- lib/faraday/connection.rb
Overview
Connection objects manage the default properties and the middleware stack for fulfilling an HTTP request.
Constant Summary collapse
- METHODS =
A Set of allowed HTTP verbs.
Set.new %i[get post put delete head patch options trace]
- USER_AGENT =
"Faraday v#{VERSION}".freeze
Instance Attribute Summary collapse
-
#builder ⇒ Faraday::RackBuilder
readonly
Builder for this Connection.
-
#default_parallel_manager { ... } ⇒ Object?
private
Check if the adapter is parallel-capable.
-
#headers ⇒ Hash
Unencoded HTTP header key/value pairs.
-
#parallel_manager ⇒ Object
readonly
The parallel manager for this Connection.
-
#params ⇒ Hash
URI query unencoded key/value pairs.
-
#proxy ⇒ Hash
Proxy options.
-
#ssl ⇒ Hash
readonly
SSL options.
-
#url_prefix ⇒ String
A URI with the prefix used for all requests from this Connection.
Class Method Summary collapse
-
.delete(url = nil, params = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a DELETE HTTP request without a body.
-
.get(url = nil, params = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a GET HTTP request without a body.
-
.head(url = nil, params = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a HEAD HTTP request without a body.
-
.post(url = nil, body = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a POST HTTP request with a body.
-
.put(url = nil, body = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a PUT HTTP request with a body.
-
.trace(url = nil, params = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a TRACE HTTP request without a body.
Instance Method Summary collapse
-
#build_exclusive_url(url = nil, params = nil, params_encoder = nil) ⇒ URI
Build an absolute URL based on url_prefix.
-
#build_request(method) {|Faraday::Request| ... } ⇒ Faraday::Request
Creates and configures the request object.
-
#build_url(url = nil, extra_params = nil) ⇒ Object
Takes a relative url for a request and combines it with the defaults set on the connection instance.
-
#close ⇒ Object
Closes the underlying resources and/or connections.
-
#dup ⇒ Faraday::Connection
private
Creates a duplicate of this Faraday::Connection.
- #find_default_proxy ⇒ Object
-
#in_parallel(manager = nil) { ... } ⇒ void
Sets up the parallel manager to make a set of requests.
-
#in_parallel? ⇒ Boolean
Determine if this Faraday::Connection can make parallel requests.
-
#initialize(url = nil, options = nil) {|self| ... } ⇒ Connection
constructor
Initializes a new Faraday::Connection.
- #initialize_proxy(url, options) ⇒ Object
- #options(*args) {|Faraday::Request| ... } ⇒ Faraday::Response
-
#path_prefix=(value) ⇒ String
Sets the path prefix and ensures that it always has a leading slash.
- #proxy_for_request(url) ⇒ Object
- #proxy_from_env(url) ⇒ Object
-
#run_request(method, url, body, headers) ⇒ Faraday::Response
Builds and runs the Faraday::Request.
- #set_basic_auth(user, password) ⇒ Object
- #support_parallel?(adapter) ⇒ Boolean
-
#with_uri_credentials(uri) {|username, password| ... } ⇒ void
private
Yields username and password extracted from a URI if they both exist.
Constructor Details
#initialize(url = nil, options = nil) {|self| ... } ⇒ Connection
Initializes a new Faraday::Connection.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/faraday/connection.rb', line 63 def initialize(url = nil, = nil) = ConnectionOptions.from() if url.is_a?(Hash) || url.is_a?(ConnectionOptions) = Utils.deep_merge(, url) url = .url end @parallel_manager = nil @headers = Utils::Headers.new @params = Utils::ParamsHash.new @options = .request @ssl = .ssl @default_parallel_manager = .parallel_manager @manual_proxy = nil @builder = .builder || begin # pass an empty block to Builder so it doesn't assume default middleware .new_builder(block_given? ? proc { |b| } : nil) end self.url_prefix = url || 'http:/' @params.update(.params) if .params @headers.update(.headers) if .headers initialize_proxy(url, ) yield(self) if block_given? @headers[:user_agent] ||= USER_AGENT end |
Instance Attribute Details
#builder ⇒ Faraday::RackBuilder (readonly)
Returns Builder for this Connection.
31 32 33 |
# File 'lib/faraday/connection.rb', line 31 def builder @builder end |
#default_parallel_manager { ... } ⇒ Object?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Check if the adapter is parallel-capable.
291 292 293 294 295 296 297 298 299 300 301 |
# File 'lib/faraday/connection.rb', line 291 def default_parallel_manager @default_parallel_manager ||= begin adapter = @builder.adapter.klass if @builder.adapter if support_parallel?(adapter) adapter.setup_parallel_manager elsif block_given? yield end end end |
#headers ⇒ Hash
Returns unencoded HTTP header key/value pairs.
24 25 26 |
# File 'lib/faraday/connection.rb', line 24 def headers @headers end |
#parallel_manager ⇒ Object (readonly)
Returns the parallel manager for this Connection.
37 38 39 |
# File 'lib/faraday/connection.rb', line 37 def parallel_manager @parallel_manager end |
#params ⇒ Hash
Returns URI query unencoded key/value pairs.
21 22 23 |
# File 'lib/faraday/connection.rb', line 21 def params @params end |
#proxy ⇒ Hash
Returns proxy options.
43 44 45 |
# File 'lib/faraday/connection.rb', line 43 def proxy @proxy end |
#ssl ⇒ Hash (readonly)
Returns SSL options.
34 35 36 |
# File 'lib/faraday/connection.rb', line 34 def ssl @ssl end |
#url_prefix ⇒ String
Returns a URI with the prefix used for all requests from this Connection. This includes a default host name, scheme, port, and path.
28 29 30 |
# File 'lib/faraday/connection.rb', line 28 def url_prefix @url_prefix end |
Class Method Details
.delete(url = nil, params = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a DELETE HTTP request without a body.
|
# File 'lib/faraday/connection.rb', line 166
|
.get(url = nil, params = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a GET HTTP request without a body.
|
# File 'lib/faraday/connection.rb', line 129
|
.head(url = nil, params = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a HEAD HTTP request without a body.
|
# File 'lib/faraday/connection.rb', line 151
|
.post(url = nil, body = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a POST HTTP request with a body.
|
# File 'lib/faraday/connection.rb', line 232
|
.put(url = nil, body = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a PUT HTTP request with a body.
|
# File 'lib/faraday/connection.rb', line 254
|
.trace(url = nil, params = nil, headers = nil) {|Faraday::Request| ... } ⇒ Faraday::Response
Makes a TRACE HTTP request without a body.
|
# File 'lib/faraday/connection.rb', line 181
|
Instance Method Details
#build_exclusive_url(url = nil, params = nil, params_encoder = nil) ⇒ URI
Build an absolute URL based on url_prefix.
of the resulting url (default: nil).
470 471 472 473 474 475 476 477 478 479 480 481 482 483 |
# File 'lib/faraday/connection.rb', line 470 def build_exclusive_url(url = nil, params = nil, params_encoder = nil) url = nil if url.respond_to?(:empty?) && url.empty? base = url_prefix.dup if url && !base.path.end_with?('/') base.path = "#{base.path}/" # ensure trailing slash end url = url.to_s.gsub(':', '%3A') if URI.parse(url.to_s).opaque uri = url ? base + url : base if params uri.query = params.to_query(params_encoder || .params_encoder) end uri.query = nil if uri.query && uri.query.empty? uri end |
#build_request(method) {|Faraday::Request| ... } ⇒ Faraday::Request
Creates and configures the request object.
453 454 455 456 457 458 459 460 |
# File 'lib/faraday/connection.rb', line 453 def build_request(method) Request.create(method) do |req| req.params = params.dup req.headers = headers.dup req. = .dup yield(req) if block_given? end end |
#build_url(url = nil, extra_params = nil) ⇒ Object
Takes a relative url for a request and combines it with the defaults set on the connection instance.
407 408 409 410 411 412 413 414 415 416 417 418 419 420 |
# File 'lib/faraday/connection.rb', line 407 def build_url(url = nil, extra_params = nil) uri = build_exclusive_url(url) query_values = params.dup.merge_query(uri.query, .params_encoder) query_values.update(extra_params) if extra_params uri.query = if query_values.empty? nil else query_values.to_query(.params_encoder) end uri end |
#close ⇒ Object
Closes the underlying resources and/or connections. In the case of persistent connections, this closes all currently open connections but does not prevent new connections from being made.
125 126 127 |
# File 'lib/faraday/connection.rb', line 125 def close app.close end |
#dup ⇒ Faraday::Connection
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Creates a duplicate of this Faraday::Connection.
490 491 492 493 494 495 496 497 |
# File 'lib/faraday/connection.rb', line 490 def dup self.class.new(build_exclusive_url, headers: headers.dup, params: params.dup, builder: builder.dup, ssl: ssl.dup, request: .dup) end |
#find_default_proxy ⇒ Object
533 534 535 536 537 538 539 |
# File 'lib/faraday/connection.rb', line 533 def find_default_proxy uri = ENV.fetch('http_proxy', nil) return unless uri && !uri.empty? uri = "http://#{uri}" unless uri.match?(/^http/i) uri end |
#in_parallel(manager = nil) { ... } ⇒ void
This method returns an undefined value.
Sets up the parallel manager to make a set of requests.
317 318 319 320 321 322 323 324 325 326 327 328 |
# File 'lib/faraday/connection.rb', line 317 def in_parallel(manager = nil) @parallel_manager = manager || default_parallel_manager do warn 'Warning: `in_parallel` called but no parallel-capable adapter ' \ 'on Faraday stack' warn caller[2, 10].join("\n") nil end yield @parallel_manager&.run ensure @parallel_manager = nil end |
#in_parallel? ⇒ Boolean
Determine if this Faraday::Connection can make parallel requests.
306 307 308 |
# File 'lib/faraday/connection.rb', line 306 def in_parallel? !!@parallel_manager end |
#initialize_proxy(url, options) ⇒ Object
96 97 98 99 100 101 102 103 104 |
# File 'lib/faraday/connection.rb', line 96 def initialize_proxy(url, ) @manual_proxy = !!.proxy @proxy = if .proxy ProxyOptions.from(.proxy) else proxy_from_env(url) end end |
#options ⇒ Faraday::Response #options(url, params = nil, headers = nil) ⇒ Faraday::Response
222 223 224 225 226 227 228 229 230 |
# File 'lib/faraday/connection.rb', line 222 def (*args) return @options if args.empty? url, params, headers = *args run_request(:options, url, nil, headers) do |request| request.params.update(params) if params yield request if block_given? end end |
#path_prefix=(value) ⇒ String
Sets the path prefix and ensures that it always has a leading slash.
382 383 384 385 386 387 |
# File 'lib/faraday/connection.rb', line 382 def path_prefix=(value) url_prefix.path = if value value = "/#{value}" unless value[0, 1] == '/' value end end |
#proxy_for_request(url) ⇒ Object
541 542 543 544 545 546 547 548 549 |
# File 'lib/faraday/connection.rb', line 541 def proxy_for_request(url) return proxy if @manual_proxy if url && Utils.URI(url).absolute? proxy_from_env(url) else proxy end end |
#proxy_from_env(url) ⇒ Object
513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 |
# File 'lib/faraday/connection.rb', line 513 def proxy_from_env(url) return if Faraday.ignore_env_proxy uri = nil case url when String uri = Utils.URI(url) uri = if uri.host.nil? find_default_proxy else URI.parse("#{uri.scheme}://#{uri.host}").find_proxy end when URI uri = url.find_proxy when nil uri = find_default_proxy end ProxyOptions.from(uri) if uri end |
#run_request(method, url, body, headers) ⇒ Faraday::Response
Builds and runs the Faraday::Request.
431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 |
# File 'lib/faraday/connection.rb', line 431 def run_request(method, url, body, headers) unless METHODS.include?(method) raise ArgumentError, "unknown http method: #{method}" end request = build_request(method) do |req| req..proxy = proxy_for_request(url) req.url(url) if url req.headers.update(headers) if headers req.body = body if body yield(req) if block_given? end builder.build_response(self, request) end |
#set_basic_auth(user, password) ⇒ Object
371 372 373 374 |
# File 'lib/faraday/connection.rb', line 371 def set_basic_auth(user, password) header = Faraday::Utils.basic_header_from(user, password) headers[Faraday::Request::Authorization::KEY] = header end |
#support_parallel?(adapter) ⇒ Boolean
551 552 553 |
# File 'lib/faraday/connection.rb', line 551 def support_parallel?(adapter) adapter.respond_to?(:supports_parallel?) && adapter&.supports_parallel? end |
#with_uri_credentials(uri) {|username, password| ... } ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Yields username and password extracted from a URI if they both exist.
507 508 509 510 511 |
# File 'lib/faraday/connection.rb', line 507 def with_uri_credentials(uri) return unless uri.user && uri.password yield(Utils.unescape(uri.user), Utils.unescape(uri.password)) end |