falcon 0.20.3 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -0
- data/Gemfile +0 -2
- data/falcon.gemspec +2 -0
- data/gems/rack1.gemfile +4 -0
- data/gems/rack3.gemfile +4 -0
- data/lib/falcon/adapters/rack.rb +47 -21
- data/lib/falcon/version.rb +1 -1
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91279ed58645ed1cda598fabfa2c4bfbf8b46b48d85592d1931029f8349c5fd5
|
4
|
+
data.tar.gz: 5b6e8eee3ab6feabb39b48fbb0b1ab2935df438f0337b8a99bc5b4cde636657b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d4083ce4077d31ed120561e49a21511633593975c3c6c620c6a674144a7a4affe2cafaf9715b95b5425b4bd2b023f9cee47e8a0b317d9f84f858d8d8c1d3ad0
|
7
|
+
data.tar.gz: aa100da91cb010f6ce2f4af7ea6ee3dbe1987ba325815793975e24cee142cb3c5f8fbe8aecb9c22fff68ae617c97eb49e0aceec6a1630361329ffbc5dbfcb984
|
data/.travis.yml
CHANGED
@@ -17,6 +17,10 @@ matrix:
|
|
17
17
|
- rvm: 2.4
|
18
18
|
- rvm: 2.5
|
19
19
|
- rvm: 2.6
|
20
|
+
- rvm: 2.6
|
21
|
+
gemfile: gems/rack1.gemfile
|
22
|
+
- rvm: 2.6
|
23
|
+
gemfile: gems/rack3.gemfile
|
20
24
|
- rvm: truffleruby
|
21
25
|
- rvm: jruby-head
|
22
26
|
env: JRUBY_OPTS="--debug -X+O"
|
@@ -28,3 +32,4 @@ matrix:
|
|
28
32
|
- rvm: jruby-head
|
29
33
|
- rvm: truffleruby
|
30
34
|
- rvm: rbx-3
|
35
|
+
- gemfile: gems/rack3.gemfile
|
data/Gemfile
CHANGED
data/falcon.gemspec
CHANGED
@@ -31,6 +31,8 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_development_dependency "async-rspec", "~> 1.7"
|
32
32
|
spec.add_development_dependency "async-websocket", "~> 0.6.0"
|
33
33
|
|
34
|
+
spec.add_development_dependency "async-process", "~> 1.1"
|
35
|
+
|
34
36
|
spec.add_development_dependency "bundler"
|
35
37
|
spec.add_development_dependency "rspec", "~> 3.6"
|
36
38
|
spec.add_development_dependency "rake"
|
data/gems/rack1.gemfile
ADDED
data/gems/rack3.gemfile
ADDED
data/lib/falcon/adapters/rack.rb
CHANGED
@@ -28,12 +28,36 @@ require 'async/logger'
|
|
28
28
|
module Falcon
|
29
29
|
module Adapters
|
30
30
|
class Rack
|
31
|
-
|
31
|
+
# CGI constants
|
32
|
+
HTTP_HOST = 'HTTP_HOST'.freeze
|
33
|
+
PATH_INFO = 'PATH_INFO'.freeze
|
34
|
+
REQUEST_METHOD = 'REQUEST_METHOD'.freeze
|
35
|
+
REQUEST_PATH = 'REQUEST_PATH'.freeze
|
36
|
+
SCRIPT_NAME = 'SCRIPT_NAME'.freeze
|
37
|
+
QUERY_STRING = 'QUERY_STRING'.freeze
|
38
|
+
SERVER_PROTOCOL = 'SERVER_PROTOCOL'.freeze
|
39
|
+
SERVER_NAME = 'SERVER_NAME'.freeze
|
40
|
+
SERVER_PORT = 'SERVER_PORT'.freeze
|
32
41
|
REMOTE_ADDR = 'REMOTE_ADDR'.freeze
|
33
|
-
|
34
42
|
CONTENT_TYPE = 'CONTENT_TYPE'.freeze
|
35
43
|
CONTENT_LENGTH = 'CONTENT_LENGTH'.freeze
|
36
44
|
|
45
|
+
# Rack environment variables
|
46
|
+
RACK_VERSION = 'rack.version'.freeze
|
47
|
+
RACK_ERRORS = 'rack.errors'.freeze
|
48
|
+
RACK_LOGGER = 'rack.logger'.freeze
|
49
|
+
RACK_INPUT = 'rack.input'.freeze
|
50
|
+
RACK_MULTITHREAD = 'rack.multithread'.freeze
|
51
|
+
RACK_MULTIPROCESS = 'rack.multiprocess'.freeze
|
52
|
+
RACK_RUNONCE = 'rack.run_once'.freeze
|
53
|
+
RACK_URL_SCHEME = 'rack.url_scheme'.freeze
|
54
|
+
RACK_HIJACK = 'rack.hijack'.freeze
|
55
|
+
RACK_IS_HIJACK = 'rack.hijack?'.freeze
|
56
|
+
RACK_HIJACK_IO = 'rack.hijack_io'.freeze
|
57
|
+
|
58
|
+
# Header constants
|
59
|
+
HTTP_X_FORWARDED_PROTO = 'HTTP_X_FORWARDED_PROTO'.freeze
|
60
|
+
|
37
61
|
def initialize(app, logger = Async.logger)
|
38
62
|
@app = app
|
39
63
|
|
@@ -69,7 +93,7 @@ module Falcon
|
|
69
93
|
self.unwrap_headers(request.headers, env)
|
70
94
|
|
71
95
|
# HTTP/2 prefers `:authority` over `host`, so we do this for backwards compatibility.
|
72
|
-
env[
|
96
|
+
env[HTTP_HOST] ||= request.authority
|
73
97
|
|
74
98
|
# This is the HTTP/1 header for the scheme of the request and is used by Rack.
|
75
99
|
# Technically it should use the Forwarded header but this is not common yet.
|
@@ -93,44 +117,46 @@ module Falcon
|
|
93
117
|
server_name, server_port = (request.authority || '').split(':', 2)
|
94
118
|
|
95
119
|
env = {
|
96
|
-
|
120
|
+
RACK_VERSION => [2, 0, 0],
|
97
121
|
|
98
|
-
|
99
|
-
|
122
|
+
RACK_INPUT => Input.new(request.body),
|
123
|
+
RACK_ERRORS => $stderr,
|
124
|
+
RACK_LOGGER => Async.logger,
|
100
125
|
|
101
|
-
|
102
|
-
|
103
|
-
|
126
|
+
RACK_MULTITHREAD => true,
|
127
|
+
RACK_MULTIPROCESS => true,
|
128
|
+
RACK_RUNONCE => false,
|
104
129
|
|
105
130
|
# The HTTP request method, such as “GET” or “POST”. This cannot ever be an empty string, and so is always required.
|
106
|
-
|
131
|
+
REQUEST_METHOD => request.method,
|
107
132
|
|
108
133
|
# The initial portion of the request URL's “path” that corresponds to the application object, so that the application knows its virtual “location”. This may be an empty string, if the application corresponds to the “root” of the server.
|
109
|
-
|
134
|
+
SCRIPT_NAME => '',
|
110
135
|
|
111
136
|
# The remainder of the request URL's “path”, designating the virtual “location” of the request's target within the application. This may be an empty string, if the request URL targets the application root and does not have a trailing slash. This value may be percent-encoded when originating from a URL.
|
112
|
-
|
137
|
+
PATH_INFO => request_path,
|
138
|
+
REQUEST_PATH => request_path,
|
113
139
|
|
114
140
|
# The portion of the request URL that follows the ?, if any. May be empty, but is always required!
|
115
|
-
|
141
|
+
QUERY_STRING => query_string || '',
|
116
142
|
|
117
143
|
# The server protocol (e.g. HTTP/1.1):
|
118
|
-
|
144
|
+
SERVER_PROTOCOL => request.version,
|
119
145
|
|
120
146
|
# The request scheme:
|
121
|
-
|
147
|
+
RACK_URL_SCHEME => request.scheme,
|
122
148
|
|
123
149
|
# I'm not sure what sane defaults should be here:
|
124
|
-
|
125
|
-
|
150
|
+
SERVER_NAME => server_name || '',
|
151
|
+
SERVER_PORT => server_port || '',
|
126
152
|
}
|
127
153
|
|
128
154
|
self.unwrap_request(request, env)
|
129
155
|
|
130
156
|
if request.hijack?
|
131
|
-
env[
|
157
|
+
env[RACK_IS_HIJACK] = true
|
132
158
|
|
133
|
-
env[
|
159
|
+
env[RACK_HIJACK] = lambda do
|
134
160
|
wrapper = request.hijack
|
135
161
|
|
136
162
|
# We dup this as it might be taken out of the normal control flow, and the io will be closed shortly after returning from this method.
|
@@ -138,10 +164,10 @@ module Falcon
|
|
138
164
|
wrapper.close
|
139
165
|
|
140
166
|
# This is implicitly returned:
|
141
|
-
env[
|
167
|
+
env[RACK_HIJACK_IO] = io
|
142
168
|
end
|
143
169
|
else
|
144
|
-
env[
|
170
|
+
env[RACK_IS_HIJACK] = false
|
145
171
|
end
|
146
172
|
|
147
173
|
status, headers, body = @app.call(env)
|
data/lib/falcon/version.rb
CHANGED
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.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http-protocol
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 0.6.0
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: async-process
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.1'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.1'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: bundler
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -217,6 +231,8 @@ files:
|
|
217
231
|
- examples/sinatra/Gemfile.lock
|
218
232
|
- examples/sinatra/config.ru
|
219
233
|
- falcon.gemspec
|
234
|
+
- gems/rack1.gemfile
|
235
|
+
- gems/rack3.gemfile
|
220
236
|
- lib/falcon.rb
|
221
237
|
- lib/falcon/adapters/input.rb
|
222
238
|
- lib/falcon/adapters/output.rb
|
@@ -256,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
256
272
|
- !ruby/object:Gem::Version
|
257
273
|
version: '0'
|
258
274
|
requirements: []
|
259
|
-
rubygems_version: 3.0.
|
275
|
+
rubygems_version: 3.0.1
|
260
276
|
signing_key:
|
261
277
|
specification_version: 4
|
262
278
|
summary: A fast, asynchronous, rack-compatible web server.
|