class Async::HTTP::Internet
Attributes
clients[R]
A cache of clients. @attribute [Hash(URI, Client
)]
Public Class Methods
new(**options)
click to toggle source
# File lib/async/http/internet.rb, line 33 def initialize(**options) @clients = Hash.new @options = options end
Public Instance Methods
call(method, url, headers = nil, body = nil)
click to toggle source
# File lib/async/http/internet.rb, line 50 def call(method, url, headers = nil, body = nil) endpoint = Endpoint.parse(url) client = self.client_for(endpoint) body = Body::Buffered.wrap(body) headers = ::Protocol::HTTP::Headers[headers] request = ::Protocol::HTTP::Request.new(endpoint.scheme, endpoint.authority, method, endpoint.path, nil, headers, body) return client.call(request) end
client_for(endpoint)
click to toggle source
# File lib/async/http/internet.rb, line 42 def client_for(endpoint) key = host_key(endpoint) @clients.fetch(key) do @clients[key] = self.make_client(endpoint) end end
close()
click to toggle source
# File lib/async/http/internet.rb, line 62 def close # The order of operations here is to avoid a race condition between iterating over clients (#close may yield) and creating new clients. clients = @clients.values @clients.clear clients.each(&:close) end
Protected Instance Methods
host_key(endpoint)
click to toggle source
# File lib/async/http/internet.rb, line 84 def host_key(endpoint) url = endpoint.url.dup url.path = "" url.fragment = nil url.query = nil return url end
make_client(endpoint)
click to toggle source
# File lib/async/http/internet.rb, line 78 def make_client(endpoint) ::Protocol::HTTP::AcceptEncoding.new( Client.new(endpoint, **@options) ) end