Class: Capybara::Server Private

Inherits:
Object
  • Object
show all
Defined in:
lib/capybara/server.rb,
lib/capybara/server/checker.rb,
lib/capybara/server/middleware.rb,
lib/capybara/server/animation_disabler.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

API:

  • private

Defined Under Namespace

Classes: AnimationDisabler, Checker, Middleware

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, *deprecated_options, port: Capybara.server_port, host: Capybara.server_host, reportable_errors: Capybara.server_errors, extra_middleware: []) ⇒ Server

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Server.

API:

  • private



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/capybara/server.rb', line 21

def initialize(app,
               *deprecated_options,
               port: Capybara.server_port,
               host: Capybara.server_host,
               reportable_errors: Capybara.server_errors,
               extra_middleware: [])
  unless deprecated_options.empty?
    warn 'Positional arguments, other than the application, to Server#new are deprecated, please use keyword arguments'
  end
  @app = app
  @extra_middleware = extra_middleware
  @server_thread = nil # suppress warnings
  @host = deprecated_options[1] || host
  @reportable_errors = deprecated_options[2] || reportable_errors
  @port = deprecated_options[0] || port
  @port ||= Capybara::Server.ports[port_key]
  @port ||= find_available_port(host)
  @checker = Checker.new(@host, @port)
end

Instance Attribute Details

#appObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



19
20
21
# File 'lib/capybara/server.rb', line 19

def app
  @app
end

#hostObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



19
20
21
# File 'lib/capybara/server.rb', line 19

def host
  @host
end

#portObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



19
20
21
# File 'lib/capybara/server.rb', line 19

def port
  @port
end

Class Method Details

.portsObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



14
15
16
# File 'lib/capybara/server.rb', line 14

def ports
  @ports ||= {}
end

Instance Method Details

#base_urlObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



91
92
93
# File 'lib/capybara/server.rb', line 91

def base_url
  "http#{'s' if using_ssl?}://#{host}:#{port}"
end

#bootObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/capybara/server.rb', line 72

def boot
  unless responsive?
    Capybara::Server.ports[port_key] = port

    @server_thread = Thread.new do
      Capybara.server.call(middleware, port, host)
    end

    timer = Capybara::Helpers.timer(expire_in: 60)
    until responsive?
      raise 'Rack application timed out during boot' if timer.expired?

      @server_thread.join(0.1)
    end
  end

  self
end

#errorObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



45
46
47
# File 'lib/capybara/server.rb', line 45

def error
  middleware.error
end

#reset_error!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



41
42
43
# File 'lib/capybara/server.rb', line 41

def reset_error!
  middleware.clear_error
end

#responsive?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

API:

  • private



53
54
55
56
57
58
59
60
61
# File 'lib/capybara/server.rb', line 53

def responsive?
  return false if @server_thread&.join(0)

  res = @checker.request { |http| http.get('/__identify__') }

  res.body == app.object_id.to_s if res.is_a?(Net::HTTPSuccess) || res.is_a?(Net::HTTPRedirection)
rescue SystemCallError, Net::ReadTimeout, OpenSSL::SSL::SSLError
  false
end

#using_ssl?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

API:

  • private



49
50
51
# File 'lib/capybara/server.rb', line 49

def using_ssl?
  @checker.ssl?
end

#wait_for_pending_requestsObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



63
64
65
66
67
68
69
70
# File 'lib/capybara/server.rb', line 63

def wait_for_pending_requests
  timer = Capybara::Helpers.timer(expire_in: 60)
  while pending_requests?
    raise "Requests did not finish in 60 seconds: #{middleware.pending_requests}" if timer.expired?

    sleep 0.01
  end
end