aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rack/handler/plum.rb
blob: 79cf995fa9a020dd9d8dc841261be470d20a237e (plain)
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
# -*- 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