Async::WebDriverSourceAsyncWebDriverBridgePoolBridgeControllerSessionCache

class SessionCache

Caches sessions created from a single driver instance.

Definitions

def initialize(driver, capabilities)

Initialize a session cache for one driver instance.

Signature

parameter driver Driver

The driver backing cached sessions.

parameter capabilities Hash

Capabilities for newly created sessions.

Implementation

def initialize(driver, capabilities)
	@driver = driver
	@capabilities = capabilities
	
	@client = driver.client
	@sessions = []
end

def viable?

Signature

returns Boolean

Whether the underlying driver remains usable.

Implementation

def viable?
	@driver&.viable?
end

def reusable?

Signature

returns Boolean

Whether cached sessions may be reused.

Implementation

def reusable?
	@driver&.reusable?
end

def close

Close the cached sessions, driver, and HTTP client.

Implementation

def close
	if @driver
		@driver.close
		@driver = nil
	end
	
	if @client
		@client.close
		@client = nil
	end
	
	if @sessions
		@sessions = nil
	end
end

def concurrency

Signature

returns Integer

The number of concurrently usable sessions.

Implementation

def concurrency
	@driver.concurrency
end

def acquire

Acquire a cached or newly created session payload.

Signature

returns Hash

A WebDriver session payload.

Implementation

def acquire
	if @sessions.empty?
		session = @client.post("session", {capabilities: @capabilities})
		
		if session.nil?
			raise Async::WebDriver::Error, "Failed to create session with capabilities: #{@capabilities.inspect}"
		end
		
		session[:cache] = self
		session[:endpoint] = @driver.endpoint
		
		return session
	else
		return @sessions.pop
	end
end

def release(session)

Return a session payload to the cache.

Signature

parameter session Hash

The session payload to cache.

Implementation

def release(session)
	@sessions.push(session)
end