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).
478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 |
# File 'lib/faraday/connection.rb', line 478 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 # Ensure relative url will be parsed correctly (such as `service:search` ) url = "./#{url}" if url.respond_to?(:start_with?) && !url.start_with?('http://', 'https://', '/', './', '../') 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.
461 462 463 464 465 466 467 468 |
# File 'lib/faraday/connection.rb', line 461 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.
415 416 417 418 419 420 421 422 423 424 425 426 427 428 |
# File 'lib/faraday/connection.rb', line 415 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.
499 500 501 502 503 504 505 506 |
# File 'lib/faraday/connection.rb', line 499 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
542 543 544 545 546 547 548 |
# File 'lib/faraday/connection.rb', line 542 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 329 330 331 332 333 334 335 336 |
# File 'lib/faraday/connection.rb', line 317 def in_parallel(manager = nil, &block) @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 return yield unless @parallel_manager if @parallel_manager.respond_to?(:execute) # Execute is the new method that is responsible for executing the block. @parallel_manager.execute(&block) else # TODO: Old behaviour, deprecate and remove in 3.0 yield @parallel_manager.run end 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.
390 391 392 393 394 395 |
# File 'lib/faraday/connection.rb', line 390 def path_prefix=(value) url_prefix.path = if value value = "/#{value}" unless value[0, 1] == '/' value end end |
#proxy_for_request(url) ⇒ Object
550 551 552 553 554 555 556 557 558 |
# File 'lib/faraday/connection.rb', line 550 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
522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 |
# File 'lib/faraday/connection.rb', line 522 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.
439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 |
# File 'lib/faraday/connection.rb', line 439 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
379 380 381 382 |
# File 'lib/faraday/connection.rb', line 379 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
560 561 562 |
# File 'lib/faraday/connection.rb', line 560 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.
516 517 518 519 520 |
# File 'lib/faraday/connection.rb', line 516 def with_uri_credentials(uri) return unless uri.user && uri.password yield(Utils.unescape(uri.user), Utils.unescape(uri.password)) end |