Class: Crspec::Rails::SystemServer

Inherits:
Object
  • Object
show all
Defined in:
lib/crspec/rails/system_server.rb

Class Method Summary collapse

Class Method Details

.effective_port(port) ⇒ Object

The effective port is offset by TEST_ENV_NUMBER so concurrent --processes children never collide on the same listener.



10
11
12
# File 'lib/crspec/rails/system_server.rb', line 10

def self.effective_port(port)
  port + ENV.fetch("TEST_ENV_NUMBER", "").to_i
end

.reset!Object



37
38
39
# File 'lib/crspec/rails/system_server.rb', line 37

def self.reset!
  @running = false
end

.running?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/crspec/rails/system_server.rb', line 33

def self.running?
  !!@running
end

.start_concurrent_server!(app = nil, port = 9887) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/crspec/rails/system_server.rb', line 14

def self.start_concurrent_server!(app = nil, port = 9887)
  port = effective_port(port)
  @server_mutex ||= Mutex.new
  @server_mutex.synchronize do
    return if @running

    if defined?(Puma::Server)
      rack_app = app || (defined?(::Rails) && ::Rails.respond_to?(:application) ? ::Rails.application : nil)
      return unless rack_app

      events = defined?(Puma::Events) ? Puma::Events.null : nil
      server = Puma::Server.new(rack_app, events, { min_threads: 1, max_threads: Etc.nprocessors })
      server.add_tcp_listener("127.0.0.1", port)
      Thread.new { server.run }
    end
    @running = true
  end
end