Pool: Make Pool#client method public

This commit is contained in:
syeopite 2025-04-09 18:30:28 -07:00
parent ebefa5e914
commit f32c954859
No known key found for this signature in database
GPG Key ID: A73C186DA3955A1A
2 changed files with 21 additions and 5 deletions

View File

@ -58,8 +58,24 @@ Spectator.describe Invidious::ConnectionPool do
expect(pool.post("/post") { |r| r.body_io.gets_to_end }).to eq("post")
end
# it "Can checkout a client" do
# end
it "Allows more than one clients to be checked out (if applicable)" do
pool = Invidious::ConnectionPool::Pool.new(URI.parse("http://localhost:12345"), max_capacity: 100)
pool.checkout do | client |
expect(pool.post("/post").body).to eq("post")
end
end
it "Can make multiple requests with the same client" do
pool = Invidious::ConnectionPool::Pool.new(URI.parse("http://localhost:12345"), max_capacity: 100)
pool.checkout do | client |
expect(client.get("/get").body).to eq("get")
expect(client.post("/post").body).to eq("post")
expect(client.get("/get").body).to eq("get")
end
end
it "Allows concurrent requests" do
pool = Invidious::ConnectionPool::Pool.new(URI.parse("http://localhost:12345"), max_capacity: 100)

View File

@ -32,7 +32,7 @@ module Invidious::ConnectionPool
# Streaming API for {{method.id.upcase}} request.
# The response will have its body as an `IO` accessed via `HTTP::Client::Response#body_io`.
def {{method.id}}(*args, **kwargs, &)
self.client do | client |
self.checkout do | client |
client.{{method.id}}(*args, **kwargs) do | response |
result = yield response
@ -47,14 +47,14 @@ module Invidious::ConnectionPool
# Executes a {{method.id.upcase}} request.
# The response will have its body as a `String`, accessed via `HTTP::Client::Response#body`.
def {{method.id}}(*args, **kwargs)
self.client do | client |
self.checkout do | client |
return client.{{method.id}}(*args, **kwargs)
end
end
{% end %}
# Checks out a client in the pool
private def client(&)
def checkout(&)
# If a client has been deleted from the pool
# we won't try to release it
client_exists_in_pool = true