1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# frozen-string-literal: true
require "plum/rack"
module Rack
module Handler
class Plum
def self.run(app, options = {})
opts = default_options.merge(options)
config = ::Plum::Rack::Config.new(
listeners: [
{
listener: ::Plum::Rack::TLSListener,
hostname: opts[:Host],
port: opts[:Port].to_i
}
],
debug: !!opts[:Debug],
threadpool_size: opts[:Threads].to_i
)
@server = ::Plum::Rack::Server.new(app, config)
yield @server if block_given? # TODO
@server.start
end
def self.shutdown
@server.stop if @server
end
def self.valid_options
{
"Host=HOST" => "Hostname to listen on (default: #{default_options[:Host]})",
"Port=PORT" => "Port to listen on (default: #{default_options[:Port]})",
"Debug" => "Turn on debug mode (default: #{default_options[:Debug]})",
"Threads=N" => "Use N threads (default: #{default_options[:Threads]})",
}
end
private
def self.default_options
rack_env = ENV["RACK_ENV"] || "development"
dev = rack_env == "development"
default_options = {
Host: dev ? "localhost" : "0.0.0.0",
Port: 8080,
Debug: dev,
Threads: 20,
}
end
end
register(:plum, ::Rack::Handler::Plum)
end
end
|