Class: HTTPkit::Client
Defined Under Namespace
Classes: BodyHandler, KeepAliveHandler, MandatoryHandler, TimeoutsHandler
Constant Summary
collapse
- DoubleRequestError =
Class.new(Error) do
attr_reader :client, :request
def initialize(client, request)
@client, @request = client, request
super(sprintf('%s %s already has sequence number %d',
request.http_method, request.uri, sequence))
end
def sequence
request.sequence(client)
end
end
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#close, #closed?, #error?, #network_fault?, #timeout?
Constructor Details
#initialize(config, connection) ⇒ Client
Returns a new instance of Client.
30
31
32
33
34
35
36
37
|
# File 'lib/httpkit/client.rb', line 30
def initialize(config, connection)
@sequence = 0
@config = config
@requests = []
setup_connection(connection)
setup_handlers
end
|
Instance Attribute Details
#config ⇒ Object
Returns the value of attribute config.
28
29
30
|
# File 'lib/httpkit/client.rb', line 28
def config
@config
end
|
Instance Method Details
#finish(request) ⇒ Object
63
64
65
66
67
68
|
# File 'lib/httpkit/client.rb', line 63
def finish(request)
@requests.delete_if do |(other)|
request.sequence(self) == other.sequence(self)
end
@handlers.invoke(:finish, request)
end
|
44
45
46
47
48
49
50
51
|
# File 'lib/httpkit/client.rb', line 44
def perform(request)
served = Promise.new
request.sequence(self, @sequence += 1)
perform!(request, served).resume if validate(request, served)
served
end
|
#receive(response) ⇒ Object
53
54
55
56
57
58
59
60
61
|
# File 'lib/httpkit/client.rb', line 53
def receive(response)
request, served = find_request
if request
request, response = @handlers.invoke(:receive, request, response)
served.fulfill(response)
response.closed { finish(request) }
end
end
|
#request(*args) ⇒ Object
39
40
41
42
|
# File 'lib/httpkit/client.rb', line 39
def request(*args)
request = Request.new(*args)
perform(request).sync
end
|
#teardown(reason) ⇒ Object
70
71
72
73
74
75
76
|
# File 'lib/httpkit/client.rb', line 70
def teardown(reason)
@requests.each do |_, served|
served.reject(reason)
next unless (response = served.value)
response.reject_closed(reason)
end
end
|