falcon 0.36.3 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/falcon/adapters/input.rb +32 -11
- data/lib/falcon/adapters/output.rb +20 -1
- data/lib/falcon/adapters/rack.rb +60 -39
- data/lib/falcon/adapters/response.rb +23 -1
- data/lib/falcon/adapters/rewindable.rb +10 -3
- data/lib/falcon/command.rb +2 -0
- data/lib/falcon/command/host.rb +13 -2
- data/lib/falcon/command/paths.rb +4 -0
- data/lib/falcon/command/proxy.rb +14 -0
- data/lib/falcon/command/redirect.rb +12 -0
- data/lib/falcon/command/serve.rb +22 -15
- data/lib/falcon/command/supervisor.rb +15 -1
- data/lib/falcon/command/top.rb +16 -0
- data/lib/falcon/command/virtual.rb +15 -0
- data/lib/falcon/configuration.rb +69 -7
- data/lib/falcon/controller/host.rb +12 -0
- data/lib/falcon/controller/proxy.rb +13 -0
- data/lib/falcon/controller/redirect.rb +7 -0
- data/lib/falcon/controller/serve.rb +17 -2
- data/lib/falcon/controller/virtual.rb +17 -0
- data/lib/falcon/endpoint.rb +8 -0
- data/lib/falcon/{configuration/proxy.rb → environments.rb} +9 -5
- data/lib/falcon/environments/application.rb +72 -0
- data/lib/falcon/{configuration/application.rb → environments/lets_encrypt_tls.rb} +21 -20
- data/lib/falcon/{configuration/lets_encrypt_tls.rb → environments/proxy.rb} +13 -6
- data/lib/falcon/{configuration → environments}/rack.rb +14 -2
- data/lib/falcon/{configuration → environments}/self_signed_tls.rb +9 -1
- data/lib/falcon/{configuration → environments}/supervisor.rb +19 -5
- data/lib/falcon/{configuration → environments}/tls.rb +39 -5
- data/lib/falcon/extensions/openssl.rb +1 -0
- data/lib/falcon/middleware/proxy.rb +26 -5
- data/lib/falcon/middleware/redirect.rb +11 -0
- data/lib/falcon/{verbose.rb → middleware/verbose.rb} +34 -26
- data/lib/falcon/proxy_endpoint.rb +21 -0
- data/lib/falcon/server.rb +8 -2
- data/lib/falcon/service/application.rb +24 -2
- data/lib/falcon/service/generic.rb +18 -0
- data/lib/falcon/service/proxy.rb +6 -0
- data/lib/falcon/service/supervisor.rb +13 -1
- data/lib/falcon/services.rb +21 -0
- data/lib/falcon/tls.rb +4 -2
- data/lib/falcon/version.rb +1 -1
- data/lib/rack/handler/falcon.rb +8 -2
- metadata +65 -122
- data/.editorconfig +0 -5
- data/.github/FUNDING.yml +0 -3
- data/.github/workflows/development.yml +0 -60
- data/.gitignore +0 -14
- data/.rspec +0 -3
- data/Gemfile +0 -17
- data/README.md +0 -316
- data/examples/beer/config.ru +0 -57
- data/examples/beer/falcon.rb +0 -8
- data/examples/benchmark/config.ru +0 -39
- data/examples/benchmark/falcon.rb +0 -6
- data/examples/csv/config.ru +0 -31
- data/examples/google/falcon.rb +0 -14
- data/examples/hello/config.ru +0 -22
- data/examples/hello/falcon.rb +0 -24
- data/examples/hello/preload.rb +0 -7
- data/examples/internet/config.ru +0 -54
- data/examples/memory/allocations.rb +0 -39
- data/examples/memory/config.ru +0 -14
- data/examples/push/client.rb +0 -29
- data/examples/push/config.ru +0 -28
- data/examples/push/index.html +0 -14
- data/examples/push/script.js +0 -2
- data/examples/push/style.css +0 -4
- data/examples/redis/Gemfile +0 -9
- data/examples/redis/config.ru +0 -28
- data/examples/sequel/Gemfile +0 -4
- data/examples/sequel/config.ru +0 -8
- data/examples/sequel/data.sqlite3 +0 -0
- data/examples/server/standalone.rb +0 -27
- data/examples/sinatra/Gemfile +0 -7
- data/examples/sinatra/Gemfile.lock +0 -53
- data/examples/sinatra/config.ru +0 -16
- data/examples/trailers/config.ru +0 -34
- data/examples/trailers/falcon.rb +0 -8
- data/falcon.gemspec +0 -45
- data/gems/rack1.gemfile +0 -4
- data/gems/rack3.gemfile +0 -4
- data/lib/falcon/adapters/early_hints.rb +0 -49
- data/logo-square.afdesign +0 -0
- data/logo.afdesign +0 -0
- data/logo.svg +0 -107
- data/server.rb +0 -21
- data/tasks/benchmark.rake +0 -103
@@ -22,7 +22,13 @@
|
|
22
22
|
|
23
23
|
module Falcon
|
24
24
|
module Service
|
25
|
+
# Captures the stateful behaviour of a specific service.
|
26
|
+
# Specifies the interfaces required by derived classes.
|
27
|
+
#
|
28
|
+
# Designed to be invoked within an {Async::Controller::Container}.
|
25
29
|
class Generic
|
30
|
+
# Convert the given environment into a service if possible.
|
31
|
+
# @parameter environment [Build::Environment] The environment to use to construct the service.
|
26
32
|
def self.wrap(environment)
|
27
33
|
evaluator = environment.evaluator
|
28
34
|
service = evaluator.service || self
|
@@ -30,29 +36,41 @@ module Falcon
|
|
30
36
|
return service.new(environment)
|
31
37
|
end
|
32
38
|
|
39
|
+
# Initialize the service from the given environment.
|
40
|
+
# @parameter environment [Build::Environment]
|
33
41
|
def initialize(environment)
|
34
42
|
@environment = environment
|
35
43
|
@evaluator = @environment.evaluator
|
36
44
|
end
|
37
45
|
|
46
|
+
# Whether the service environment contains the specified keys.
|
47
|
+
# This is used for matching environment configuration to service behaviour.
|
38
48
|
def include?(keys)
|
39
49
|
keys.all?{|key| @environment.include?(key)}
|
40
50
|
end
|
41
51
|
|
52
|
+
# The name of the service.
|
53
|
+
# e.g. `myapp.com`.
|
42
54
|
def name
|
43
55
|
@evaluator.name
|
44
56
|
end
|
45
57
|
|
58
|
+
# The logger to use for this service.
|
59
|
+
# @returns [Console::Logger]
|
46
60
|
def logger
|
47
61
|
return Async.logger # .with(name: name)
|
48
62
|
end
|
49
63
|
|
64
|
+
# Start the service.
|
50
65
|
def start
|
51
66
|
end
|
52
67
|
|
68
|
+
# Setup the service into the specified container.
|
69
|
+
# @parameter container [Async::Container::Generic]
|
53
70
|
def setup(container)
|
54
71
|
end
|
55
72
|
|
73
|
+
# Stop the service.
|
56
74
|
def stop
|
57
75
|
end
|
58
76
|
end
|
data/lib/falcon/service/proxy.rb
CHANGED
@@ -32,26 +32,32 @@ module Falcon
|
|
32
32
|
"#{self.class} for #{self.authority}"
|
33
33
|
end
|
34
34
|
|
35
|
+
# The host that this proxy will receive connections for.
|
35
36
|
def authority
|
36
37
|
@evaluator.authority
|
37
38
|
end
|
38
39
|
|
40
|
+
# The upstream endpoint that this proxy will connect to.
|
39
41
|
def endpoint
|
40
42
|
@evaluator.endpoint
|
41
43
|
end
|
42
44
|
|
45
|
+
# The {OpenSSL::SSL::SSLContext} that will be used for incoming connections.
|
43
46
|
def ssl_context
|
44
47
|
@evaluator.ssl_context
|
45
48
|
end
|
46
49
|
|
50
|
+
# The root
|
47
51
|
def root
|
48
52
|
@evaluator.root
|
49
53
|
end
|
50
54
|
|
55
|
+
# The protocol this proxy will use to talk to the upstream host.
|
51
56
|
def protocol
|
52
57
|
endpoint.protocol
|
53
58
|
end
|
54
59
|
|
60
|
+
# The scheme this proxy will use to talk to the upstream host.
|
55
61
|
def scheme
|
56
62
|
endpoint.scheme
|
57
63
|
end
|
@@ -28,33 +28,41 @@ require 'async/io/shared_endpoint'
|
|
28
28
|
|
29
29
|
module Falcon
|
30
30
|
module Service
|
31
|
+
# Implements a host supervisor which can restart the host services and provide various metrics about the running processes.
|
31
32
|
class Supervisor < Generic
|
33
|
+
# Initialize the supervisor using the given environment.
|
34
|
+
# @parameter environment [Build::Environment]
|
32
35
|
def initialize(environment)
|
33
36
|
super
|
34
37
|
|
35
38
|
@bound_endpoint = nil
|
36
39
|
end
|
37
40
|
|
41
|
+
# The endpoint which the supervisor will bind to.
|
42
|
+
# Typically a unix pipe in the same directory as the host.
|
38
43
|
def endpoint
|
39
44
|
@evaluator.endpoint
|
40
45
|
end
|
41
46
|
|
47
|
+
# Restart the process group that the supervisor belongs to.
|
42
48
|
def do_restart(message)
|
43
49
|
# Tell the parent of this process group to spin up a new process group/container.
|
44
50
|
# Wait for that to start accepting new connections.
|
45
51
|
# Stop accepting connections.
|
46
52
|
# Wait for existing connnections to drain.
|
47
53
|
# Terminate this process group.
|
48
|
-
|
49
54
|
signal = message[:signal] || :INT
|
50
55
|
|
51
56
|
Process.kill(signal, Process.ppid)
|
52
57
|
end
|
53
58
|
|
59
|
+
# Capture process metrics relating to the process group that the supervisor belongs to.
|
54
60
|
def do_metrics(message)
|
55
61
|
Process::Metrics::General.capture(pid: Process.ppid, ppid: Process.ppid)
|
56
62
|
end
|
57
63
|
|
64
|
+
# Handle an incoming request.
|
65
|
+
# @parameter message [Hash] The decoded message.
|
58
66
|
def handle(message)
|
59
67
|
case message[:please]
|
60
68
|
when 'restart'
|
@@ -64,6 +72,7 @@ module Falcon
|
|
64
72
|
end
|
65
73
|
end
|
66
74
|
|
75
|
+
# Bind the supervisor to the specified endpoint.
|
67
76
|
def start
|
68
77
|
Async.logger.info(self) {"Binding to #{self.endpoint}..."}
|
69
78
|
|
@@ -74,6 +83,8 @@ module Falcon
|
|
74
83
|
super
|
75
84
|
end
|
76
85
|
|
86
|
+
# Start the supervisor process which accepts connections from the bound endpoint and processes JSON formatted messages.
|
87
|
+
# @parameter container [Async::Container::Generic]
|
77
88
|
def setup(container)
|
78
89
|
container.run(name: self.name, restart: true, count: 1) do |instance|
|
79
90
|
Async do
|
@@ -93,6 +104,7 @@ module Falcon
|
|
93
104
|
super
|
94
105
|
end
|
95
106
|
|
107
|
+
# Release the bound endpoint.
|
96
108
|
def stop
|
97
109
|
@bound_endpoint&.close
|
98
110
|
@bound_endpoint = nil
|
data/lib/falcon/services.rb
CHANGED
@@ -23,7 +23,19 @@
|
|
23
23
|
require_relative 'service/generic'
|
24
24
|
|
25
25
|
module Falcon
|
26
|
+
# Represents one or more services associated with a host.
|
27
|
+
#
|
28
|
+
# The services model allows falcon to manage one more more service associated with a given host. Some examples of services include:
|
29
|
+
#
|
30
|
+
# - Rack applications wrapped by {Service::Application}.
|
31
|
+
# - Host supervisor implemented in {Service::Supervisor}.
|
32
|
+
# - Proxy services wrapped by {Service::Proxy}.
|
33
|
+
#
|
34
|
+
# The list of services is typically generated from the user supplied `falcon.rb` configuration file, which is loaded into an immutable {Configuration} instance, which is mapped into a list of services.
|
26
35
|
class Services
|
36
|
+
# Initialize the services from the given configuration.
|
37
|
+
#
|
38
|
+
# @parameter configuration [Configuration]
|
27
39
|
def initialize(configuration)
|
28
40
|
@named = {}
|
29
41
|
|
@@ -34,14 +46,19 @@ module Falcon
|
|
34
46
|
end
|
35
47
|
end
|
36
48
|
|
49
|
+
# Enumerate all named services.
|
37
50
|
def each(&block)
|
38
51
|
@named.each_value(&block)
|
39
52
|
end
|
40
53
|
|
54
|
+
# Add a named service.
|
55
|
+
#
|
56
|
+
# @parameter service [Service]
|
41
57
|
def add(service)
|
42
58
|
@named[service.name] = service
|
43
59
|
end
|
44
60
|
|
61
|
+
# Start all named services.
|
45
62
|
def start
|
46
63
|
@named.each do |name, service|
|
47
64
|
Async.logger.debug(self) {"Starting #{name}..."}
|
@@ -49,6 +66,9 @@ module Falcon
|
|
49
66
|
end
|
50
67
|
end
|
51
68
|
|
69
|
+
# Setup all named services into the given container.
|
70
|
+
#
|
71
|
+
# @parameter container [Async::Container::Generic]
|
52
72
|
def setup(container)
|
53
73
|
@named.each do |name, service|
|
54
74
|
Async.logger.debug(self) {"Setup #{name} into #{container}..."}
|
@@ -58,6 +78,7 @@ module Falcon
|
|
58
78
|
return container
|
59
79
|
end
|
60
80
|
|
81
|
+
# Stop all named services.
|
61
82
|
def stop
|
62
83
|
failed = false
|
63
84
|
|
data/lib/falcon/tls.rb
CHANGED
@@ -24,8 +24,10 @@ require_relative 'extensions/openssl'
|
|
24
24
|
|
25
25
|
module Falcon
|
26
26
|
module TLS
|
27
|
-
#
|
28
|
-
#
|
27
|
+
# The list of supported ciphers.
|
28
|
+
#
|
29
|
+
# We follow "Intermediate compatibility" as oulined here:
|
30
|
+
# <https://wiki.mozilla.org/Security/Server_Side_TLS>
|
29
31
|
SERVER_CIPHERS = [
|
30
32
|
# TLS 1.3:
|
31
33
|
"TLS_AES_128_GCM_SHA256",
|
data/lib/falcon/version.rb
CHANGED
data/lib/rack/handler/falcon.rb
CHANGED
@@ -9,10 +9,14 @@ require 'async/io/host_endpoint'
|
|
9
9
|
|
10
10
|
module Rack
|
11
11
|
module Handler
|
12
|
+
# The falcon adaptor for the `rackup` executable.
|
12
13
|
module Falcon
|
13
|
-
|
14
|
+
# The default scheme.
|
15
|
+
SCHEME = "http"
|
14
16
|
NAME = :falcon
|
15
17
|
|
18
|
+
# Generate an endpoint for the given `rackup` options.
|
19
|
+
# @returns [Async::IO::Endpoint]
|
16
20
|
def self.endpoint_for(**options)
|
17
21
|
host = options[:Host] || 'localhost'
|
18
22
|
port = Integer(options[:Port] || 9292)
|
@@ -20,13 +24,15 @@ module Rack
|
|
20
24
|
return Async::IO::Endpoint.tcp(host, port)
|
21
25
|
end
|
22
26
|
|
27
|
+
# Run the specified app using the given options:
|
28
|
+
# @parameter app [Object] The rack middleware.
|
23
29
|
def self.run(app, **options)
|
24
30
|
endpoint = endpoint_for(**options)
|
25
31
|
|
26
32
|
app = ::Falcon::Adapters::Rack.new(app)
|
27
33
|
app = ::Falcon::Adapters::Rewindable.new(app)
|
28
34
|
|
29
|
-
server = ::Falcon::Server.new(app, endpoint, Async::HTTP::Protocol::HTTP1, SCHEME)
|
35
|
+
server = ::Falcon::Server.new(app, endpoint, protocol: Async::HTTP::Protocol::HTTP1, scheme: SCHEME)
|
30
36
|
yield server if block_given?
|
31
37
|
|
32
38
|
Async::Reactor.run do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: falcon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.37.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -25,89 +25,89 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.13'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: async-
|
28
|
+
name: async-container
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.16.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.16.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: async-http
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.54.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.54.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: async-http-cache
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.3.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.3.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: async-
|
70
|
+
name: async-io
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: '1.22'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: '1.22'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: build-environment
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
89
|
+
version: '1.13'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
96
|
+
version: '1.13'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: bundler
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '0'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: localhost
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,91 +123,91 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '1.1'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: process-metrics
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 0.2.0
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 0.2.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: rack
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: '1.0'
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - "
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
version: '1.0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: samovar
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: '1
|
160
|
-
type: :
|
159
|
+
version: '2.1'
|
160
|
+
type: :runtime
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: '1
|
166
|
+
version: '2.1'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
|
-
name: async-
|
168
|
+
name: async-process
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
173
|
+
version: '1.1'
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
180
|
+
version: '1.1'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name: async-
|
182
|
+
name: async-rspec
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
185
|
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: '1.
|
187
|
+
version: '1.7'
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
192
|
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: '1.
|
194
|
+
version: '1.7'
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
196
|
+
name: async-websocket
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
|
-
- - "
|
199
|
+
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
201
|
+
version: 0.14.0
|
202
202
|
type: :development
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
|
-
- - "
|
206
|
+
- - "~>"
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
208
|
+
version: 0.14.0
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
210
|
+
name: bake
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
212
212
|
requirements:
|
213
213
|
- - ">="
|
@@ -221,7 +221,7 @@ dependencies:
|
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: '0'
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
224
|
+
name: covered
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
227
|
- - ">="
|
@@ -248,72 +248,18 @@ dependencies:
|
|
248
248
|
- - "~>"
|
249
249
|
- !ruby/object:Gem::Version
|
250
250
|
version: '3.6'
|
251
|
-
|
252
|
-
name: bake-bundler
|
253
|
-
requirement: !ruby/object:Gem::Requirement
|
254
|
-
requirements:
|
255
|
-
- - ">="
|
256
|
-
- !ruby/object:Gem::Version
|
257
|
-
version: '0'
|
258
|
-
type: :development
|
259
|
-
prerelease: false
|
260
|
-
version_requirements: !ruby/object:Gem::Requirement
|
261
|
-
requirements:
|
262
|
-
- - ">="
|
263
|
-
- !ruby/object:Gem::Version
|
264
|
-
version: '0'
|
265
|
-
description:
|
251
|
+
description:
|
266
252
|
email:
|
267
|
-
- samuel.williams@oriontransfer.co.nz
|
268
253
|
executables:
|
269
254
|
- falcon
|
270
255
|
- falcon-host
|
271
256
|
extensions: []
|
272
257
|
extra_rdoc_files: []
|
273
258
|
files:
|
274
|
-
- ".editorconfig"
|
275
|
-
- ".github/FUNDING.yml"
|
276
|
-
- ".github/workflows/development.yml"
|
277
|
-
- ".gitignore"
|
278
|
-
- ".rspec"
|
279
|
-
- Gemfile
|
280
|
-
- README.md
|
281
259
|
- bake/falcon/supervisor.rb
|
282
260
|
- bin/falcon
|
283
261
|
- bin/falcon-host
|
284
|
-
- examples/beer/config.ru
|
285
|
-
- examples/beer/falcon.rb
|
286
|
-
- examples/benchmark/config.ru
|
287
|
-
- examples/benchmark/falcon.rb
|
288
|
-
- examples/csv/config.ru
|
289
|
-
- examples/google/falcon.rb
|
290
|
-
- examples/hello/config.ru
|
291
|
-
- examples/hello/falcon.rb
|
292
|
-
- examples/hello/preload.rb
|
293
|
-
- examples/internet/config.ru
|
294
|
-
- examples/memory/allocations.rb
|
295
|
-
- examples/memory/config.ru
|
296
|
-
- examples/push/client.rb
|
297
|
-
- examples/push/config.ru
|
298
|
-
- examples/push/index.html
|
299
|
-
- examples/push/script.js
|
300
|
-
- examples/push/style.css
|
301
|
-
- examples/redis/Gemfile
|
302
|
-
- examples/redis/config.ru
|
303
|
-
- examples/sequel/Gemfile
|
304
|
-
- examples/sequel/config.ru
|
305
|
-
- examples/sequel/data.sqlite3
|
306
|
-
- examples/server/standalone.rb
|
307
|
-
- examples/sinatra/Gemfile
|
308
|
-
- examples/sinatra/Gemfile.lock
|
309
|
-
- examples/sinatra/config.ru
|
310
|
-
- examples/trailers/config.ru
|
311
|
-
- examples/trailers/falcon.rb
|
312
|
-
- falcon.gemspec
|
313
|
-
- gems/rack1.gemfile
|
314
|
-
- gems/rack3.gemfile
|
315
262
|
- lib/falcon.rb
|
316
|
-
- lib/falcon/adapters/early_hints.rb
|
317
263
|
- lib/falcon/adapters/input.rb
|
318
264
|
- lib/falcon/adapters/output.rb
|
319
265
|
- lib/falcon/adapters/rack.rb
|
@@ -329,22 +275,24 @@ files:
|
|
329
275
|
- lib/falcon/command/top.rb
|
330
276
|
- lib/falcon/command/virtual.rb
|
331
277
|
- lib/falcon/configuration.rb
|
332
|
-
- lib/falcon/configuration/application.rb
|
333
|
-
- lib/falcon/configuration/lets_encrypt_tls.rb
|
334
|
-
- lib/falcon/configuration/proxy.rb
|
335
|
-
- lib/falcon/configuration/rack.rb
|
336
|
-
- lib/falcon/configuration/self_signed_tls.rb
|
337
|
-
- lib/falcon/configuration/supervisor.rb
|
338
|
-
- lib/falcon/configuration/tls.rb
|
339
278
|
- lib/falcon/controller/host.rb
|
340
279
|
- lib/falcon/controller/proxy.rb
|
341
280
|
- lib/falcon/controller/redirect.rb
|
342
281
|
- lib/falcon/controller/serve.rb
|
343
282
|
- lib/falcon/controller/virtual.rb
|
344
283
|
- lib/falcon/endpoint.rb
|
284
|
+
- lib/falcon/environments.rb
|
285
|
+
- lib/falcon/environments/application.rb
|
286
|
+
- lib/falcon/environments/lets_encrypt_tls.rb
|
287
|
+
- lib/falcon/environments/proxy.rb
|
288
|
+
- lib/falcon/environments/rack.rb
|
289
|
+
- lib/falcon/environments/self_signed_tls.rb
|
290
|
+
- lib/falcon/environments/supervisor.rb
|
291
|
+
- lib/falcon/environments/tls.rb
|
345
292
|
- lib/falcon/extensions/openssl.rb
|
346
293
|
- lib/falcon/middleware/proxy.rb
|
347
294
|
- lib/falcon/middleware/redirect.rb
|
295
|
+
- lib/falcon/middleware/verbose.rb
|
348
296
|
- lib/falcon/proxy_endpoint.rb
|
349
297
|
- lib/falcon/server.rb
|
350
298
|
- lib/falcon/service/application.rb
|
@@ -353,34 +301,29 @@ files:
|
|
353
301
|
- lib/falcon/service/supervisor.rb
|
354
302
|
- lib/falcon/services.rb
|
355
303
|
- lib/falcon/tls.rb
|
356
|
-
- lib/falcon/verbose.rb
|
357
304
|
- lib/falcon/version.rb
|
358
305
|
- lib/rack/handler/falcon.rb
|
359
|
-
- logo-square.afdesign
|
360
|
-
- logo.afdesign
|
361
|
-
- logo.svg
|
362
|
-
- server.rb
|
363
|
-
- tasks/benchmark.rake
|
364
306
|
homepage: https://github.com/socketry/falcon
|
365
|
-
licenses:
|
307
|
+
licenses:
|
308
|
+
- MIT
|
366
309
|
metadata: {}
|
367
|
-
post_install_message:
|
310
|
+
post_install_message:
|
368
311
|
rdoc_options: []
|
369
312
|
require_paths:
|
370
313
|
- lib
|
371
314
|
required_ruby_version: !ruby/object:Gem::Requirement
|
372
315
|
requirements:
|
373
|
-
- - "
|
316
|
+
- - ">="
|
374
317
|
- !ruby/object:Gem::Version
|
375
|
-
version: '2.
|
318
|
+
version: '2.5'
|
376
319
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
377
320
|
requirements:
|
378
321
|
- - ">="
|
379
322
|
- !ruby/object:Gem::Version
|
380
323
|
version: '0'
|
381
324
|
requirements: []
|
382
|
-
rubygems_version: 3.
|
383
|
-
signing_key:
|
325
|
+
rubygems_version: 3.2.3
|
326
|
+
signing_key:
|
384
327
|
specification_version: 4
|
385
328
|
summary: A fast, asynchronous, rack-compatible web server.
|
386
329
|
test_files: []
|