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.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/lib/falcon/adapters/input.rb +32 -11
  3. data/lib/falcon/adapters/output.rb +20 -1
  4. data/lib/falcon/adapters/rack.rb +60 -39
  5. data/lib/falcon/adapters/response.rb +23 -1
  6. data/lib/falcon/adapters/rewindable.rb +10 -3
  7. data/lib/falcon/command.rb +2 -0
  8. data/lib/falcon/command/host.rb +13 -2
  9. data/lib/falcon/command/paths.rb +4 -0
  10. data/lib/falcon/command/proxy.rb +14 -0
  11. data/lib/falcon/command/redirect.rb +12 -0
  12. data/lib/falcon/command/serve.rb +22 -15
  13. data/lib/falcon/command/supervisor.rb +15 -1
  14. data/lib/falcon/command/top.rb +16 -0
  15. data/lib/falcon/command/virtual.rb +15 -0
  16. data/lib/falcon/configuration.rb +69 -7
  17. data/lib/falcon/controller/host.rb +12 -0
  18. data/lib/falcon/controller/proxy.rb +13 -0
  19. data/lib/falcon/controller/redirect.rb +7 -0
  20. data/lib/falcon/controller/serve.rb +17 -2
  21. data/lib/falcon/controller/virtual.rb +17 -0
  22. data/lib/falcon/endpoint.rb +8 -0
  23. data/lib/falcon/{configuration/proxy.rb → environments.rb} +9 -5
  24. data/lib/falcon/environments/application.rb +72 -0
  25. data/lib/falcon/{configuration/application.rb → environments/lets_encrypt_tls.rb} +21 -20
  26. data/lib/falcon/{configuration/lets_encrypt_tls.rb → environments/proxy.rb} +13 -6
  27. data/lib/falcon/{configuration → environments}/rack.rb +14 -2
  28. data/lib/falcon/{configuration → environments}/self_signed_tls.rb +9 -1
  29. data/lib/falcon/{configuration → environments}/supervisor.rb +19 -5
  30. data/lib/falcon/{configuration → environments}/tls.rb +39 -5
  31. data/lib/falcon/extensions/openssl.rb +1 -0
  32. data/lib/falcon/middleware/proxy.rb +26 -5
  33. data/lib/falcon/middleware/redirect.rb +11 -0
  34. data/lib/falcon/{verbose.rb → middleware/verbose.rb} +34 -26
  35. data/lib/falcon/proxy_endpoint.rb +21 -0
  36. data/lib/falcon/server.rb +8 -2
  37. data/lib/falcon/service/application.rb +24 -2
  38. data/lib/falcon/service/generic.rb +18 -0
  39. data/lib/falcon/service/proxy.rb +6 -0
  40. data/lib/falcon/service/supervisor.rb +13 -1
  41. data/lib/falcon/services.rb +21 -0
  42. data/lib/falcon/tls.rb +4 -2
  43. data/lib/falcon/version.rb +1 -1
  44. data/lib/rack/handler/falcon.rb +8 -2
  45. metadata +65 -122
  46. data/.editorconfig +0 -5
  47. data/.github/FUNDING.yml +0 -3
  48. data/.github/workflows/development.yml +0 -60
  49. data/.gitignore +0 -14
  50. data/.rspec +0 -3
  51. data/Gemfile +0 -17
  52. data/README.md +0 -316
  53. data/examples/beer/config.ru +0 -57
  54. data/examples/beer/falcon.rb +0 -8
  55. data/examples/benchmark/config.ru +0 -39
  56. data/examples/benchmark/falcon.rb +0 -6
  57. data/examples/csv/config.ru +0 -31
  58. data/examples/google/falcon.rb +0 -14
  59. data/examples/hello/config.ru +0 -22
  60. data/examples/hello/falcon.rb +0 -24
  61. data/examples/hello/preload.rb +0 -7
  62. data/examples/internet/config.ru +0 -54
  63. data/examples/memory/allocations.rb +0 -39
  64. data/examples/memory/config.ru +0 -14
  65. data/examples/push/client.rb +0 -29
  66. data/examples/push/config.ru +0 -28
  67. data/examples/push/index.html +0 -14
  68. data/examples/push/script.js +0 -2
  69. data/examples/push/style.css +0 -4
  70. data/examples/redis/Gemfile +0 -9
  71. data/examples/redis/config.ru +0 -28
  72. data/examples/sequel/Gemfile +0 -4
  73. data/examples/sequel/config.ru +0 -8
  74. data/examples/sequel/data.sqlite3 +0 -0
  75. data/examples/server/standalone.rb +0 -27
  76. data/examples/sinatra/Gemfile +0 -7
  77. data/examples/sinatra/Gemfile.lock +0 -53
  78. data/examples/sinatra/config.ru +0 -16
  79. data/examples/trailers/config.ru +0 -34
  80. data/examples/trailers/falcon.rb +0 -8
  81. data/falcon.gemspec +0 -45
  82. data/gems/rack1.gemfile +0 -4
  83. data/gems/rack3.gemfile +0 -4
  84. data/lib/falcon/adapters/early_hints.rb +0 -49
  85. data/logo-square.afdesign +0 -0
  86. data/logo.afdesign +0 -0
  87. data/logo.svg +0 -107
  88. data/server.rb +0 -21
  89. 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
@@ -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
@@ -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
 
@@ -24,8 +24,10 @@ require_relative 'extensions/openssl'
24
24
 
25
25
  module Falcon
26
26
  module TLS
27
- # We follow "Intermediate compatibility"
28
- # https://wiki.mozilla.org/Security/Server_Side_TLS
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",
@@ -21,5 +21,5 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  module Falcon
24
- VERSION = "0.36.3"
24
+ VERSION = "0.37.0"
25
25
  end
@@ -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
- SCHEME = "http".freeze
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.36.3
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-04-21 00:00:00.000000000 Z
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-io
28
+ name: async-container
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.22'
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: '1.22'
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.51.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.51.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.2.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.2.0
68
+ version: 0.3.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: async-container
70
+ name: async-io
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.16.0
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: 0.16.0
82
+ version: '1.22'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rack
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.0'
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.0'
96
+ version: '1.13'
97
97
  - !ruby/object:Gem::Dependency
98
- name: samovar
98
+ name: bundler
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '2.1'
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: '2.1'
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: build-environment
126
+ name: process-metrics
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '1.13'
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: '1.13'
138
+ version: 0.2.0
139
139
  - !ruby/object:Gem::Dependency
140
- name: process-metrics
140
+ name: rack
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: 0.2.0
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: 0.2.0
152
+ version: '1.0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: async-rspec
154
+ name: samovar
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '1.7'
160
- type: :development
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.7'
166
+ version: '2.1'
167
167
  - !ruby/object:Gem::Dependency
168
- name: async-websocket
168
+ name: async-process
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 0.14.0
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: 0.14.0
180
+ version: '1.1'
181
181
  - !ruby/object:Gem::Dependency
182
- name: async-process
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.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.1'
194
+ version: '1.7'
195
195
  - !ruby/object:Gem::Dependency
196
- name: bake
196
+ name: async-websocket
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - ">="
199
+ - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: '0'
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: '0'
208
+ version: 0.14.0
209
209
  - !ruby/object:Gem::Dependency
210
- name: covered
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: bundler
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
- - !ruby/object:Gem::Dependency
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.4'
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.1.2
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: []