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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58aa5dfb614f0aac02f49c8b8cee05705c4444e7c04914460cb97329af90aba9
4
- data.tar.gz: 25913f7fb8abdc8a910429adeb62138203fb8d19a38e8fe81abcd4c60bd63d3e
3
+ metadata.gz: 91279ed58645ed1cda598fabfa2c4bfbf8b46b48d85592d1931029f8349c5fd5
4
+ data.tar.gz: 5b6e8eee3ab6feabb39b48fbb0b1ab2935df438f0337b8a99bc5b4cde636657b
5
5
  SHA512:
6
- metadata.gz: 3b0ccf9d296dea171f3a1368ce96ff293924a8e43d07587cbc7600f557c3cf48b0e3613f10c4c16907c8d810d5343474776e3aed16d4f95affe93670bbd08ecc
7
- data.tar.gz: 854d16a9dd87bf29445c84827481d0234b24d57fd0df400e51535bc57e369330c624fd6305a27044949c3fd296f515c3b64df180a705a92933c6455c759f6df1
6
+ metadata.gz: 7d4083ce4077d31ed120561e49a21511633593975c3c6c620c6a674144a7a4affe2cafaf9715b95b5425b4bd2b023f9cee47e8a0b317d9f84f858d8d8c1d3ad0
7
+ data.tar.gz: aa100da91cb010f6ce2f4af7ea6ee3dbe1987ba325815793975e24cee142cb3c5f8fbe8aecb9c22fff68ae617c97eb49e0aceec6a1630361329ffbc5dbfcb984
@@ -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
@@ -10,7 +10,5 @@ group :test do
10
10
  gem 'pry'
11
11
  gem 'covered', require: 'covered/rspec' if RUBY_VERSION >= "2.6.0"
12
12
 
13
- gem 'async-process', '~> 1.1'
14
-
15
13
  gem 'puma'
16
14
  end
@@ -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"
@@ -0,0 +1,4 @@
1
+
2
+ eval_gemfile("../Gemfile")
3
+
4
+ gem 'rack', '~> 1.0'
@@ -0,0 +1,4 @@
1
+
2
+ eval_gemfile("../Gemfile")
3
+
4
+ gem 'rack', github: 'rack/rack'
@@ -28,12 +28,36 @@ require 'async/logger'
28
28
  module Falcon
29
29
  module Adapters
30
30
  class Rack
31
- HTTP_X_FORWARDED_PROTO = 'HTTP_X_FORWARDED_PROTO'.freeze
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[::Rack::HTTP_HOST] ||= request.authority
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
- ::Rack::RACK_VERSION => [2, 0, 0],
120
+ RACK_VERSION => [2, 0, 0],
97
121
 
98
- ::Rack::RACK_INPUT => Input.new(request.body),
99
- ::Rack::RACK_ERRORS => $stderr,
122
+ RACK_INPUT => Input.new(request.body),
123
+ RACK_ERRORS => $stderr,
124
+ RACK_LOGGER => Async.logger,
100
125
 
101
- ::Rack::RACK_MULTITHREAD => true,
102
- ::Rack::RACK_MULTIPROCESS => true,
103
- ::Rack::RACK_RUNONCE => false,
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
- ::Rack::REQUEST_METHOD => request.method,
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
- ::Rack::SCRIPT_NAME => '',
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
- ::Rack::PATH_INFO => request_path,
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
- ::Rack::QUERY_STRING => query_string || '',
141
+ QUERY_STRING => query_string || '',
116
142
 
117
143
  # The server protocol (e.g. HTTP/1.1):
118
- ::Rack::SERVER_PROTOCOL => request.version,
144
+ SERVER_PROTOCOL => request.version,
119
145
 
120
146
  # The request scheme:
121
- ::Rack::RACK_URL_SCHEME => request.scheme,
147
+ RACK_URL_SCHEME => request.scheme,
122
148
 
123
149
  # I'm not sure what sane defaults should be here:
124
- ::Rack::SERVER_NAME => server_name || '',
125
- ::Rack::SERVER_PORT => server_port || '',
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[::Rack::RACK_IS_HIJACK] = true
157
+ env[RACK_IS_HIJACK] = true
132
158
 
133
- env[::Rack::RACK_HIJACK] = lambda do
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[::Rack::RACK_HIJACK_IO] = io
167
+ env[RACK_HIJACK_IO] = io
142
168
  end
143
169
  else
144
- env[::Rack::RACK_IS_HIJACK] = false
170
+ env[RACK_IS_HIJACK] = false
145
171
  end
146
172
 
147
173
  status, headers, body = @app.call(env)
@@ -19,5 +19,5 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  module Falcon
22
- VERSION = "0.20.3"
22
+ VERSION = "0.21.0"
23
23
  end
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.20.3
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-23 00:00:00.000000000 Z
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.2
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.