class Capybara::Server
Attributes
app[R]
host[R]
port[R]
Public Class Methods
new(app, port=Capybara.server_port, host=Capybara.server_host)
click to toggle source
# File lib/capybara/server.rb, line 62 def initialize(app, port=Capybara.server_port, host=Capybara.server_host) @app = app @middleware = Middleware.new(@app) @server_thread = nil # suppress warnings @host, @port = host, port @port ||= Capybara::Server.ports[Capybara.reuse_server ? @app.object_id : @middleware.object_id] @port ||= find_available_port(host) end
ports()
click to toggle source
# File lib/capybara/server.rb, line 55 def ports @ports ||= {} end
Public Instance Methods
boot()
click to toggle source
# File lib/capybara/server.rb, line 97 def boot unless responsive? Capybara::Server.ports[Capybara.reuse_server ? @app.object_id : @middleware.object_id] = @port @server_thread = Thread.new do Capybara.server.call(@middleware, @port, @host) end Timeout.timeout(60) { @server_thread.join(0.1) until responsive? } end rescue Timeout::Error raise "Rack application timed out during boot" else self end
error()
click to toggle source
# File lib/capybara/server.rb, line 75 def error @middleware.error end
reset_error!()
click to toggle source
# File lib/capybara/server.rb, line 71 def reset_error! @middleware.error = nil end
responsive?()
click to toggle source
# File lib/capybara/server.rb, line 79 def responsive? return false if @server_thread && @server_thread.join(0) res = Net::HTTP.start(host, @port) { |http| http.get('/__identify__') } if res.is_a?(Net::HTTPSuccess) or res.is_a?(Net::HTTPRedirection) return res.body == @app.object_id.to_s end rescue SystemCallError return false end
wait_for_pending_requests()
click to toggle source
# File lib/capybara/server.rb, line 91 def wait_for_pending_requests Timeout.timeout(60) { sleep(0.01) while @middleware.pending_requests? } rescue Timeout::Error raise "Requests did not finish in 60 seconds" end
Private Instance Methods
find_available_port(host)
click to toggle source
# File lib/capybara/server.rb, line 115 def find_available_port(host) server = TCPServer.new(host, 0) server.addr[1] ensure server.close if server end