opal-up 0.0.2 → 0.0.4

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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +209 -0
  3. data/README.md +97 -29
  4. data/bin/up_ruby +4 -0
  5. data/bin/up_ruby_cluster +4 -0
  6. data/ext/up_ext/App.h +606 -0
  7. data/ext/up_ext/AsyncSocket.h +355 -0
  8. data/ext/up_ext/AsyncSocketData.h +87 -0
  9. data/ext/up_ext/BloomFilter.h +83 -0
  10. data/ext/up_ext/ChunkedEncoding.h +236 -0
  11. data/ext/up_ext/ClientApp.h +36 -0
  12. data/ext/up_ext/HttpContext.h +502 -0
  13. data/ext/up_ext/HttpContextData.h +56 -0
  14. data/ext/up_ext/HttpErrors.h +53 -0
  15. data/ext/up_ext/HttpParser.h +680 -0
  16. data/ext/up_ext/HttpResponse.h +578 -0
  17. data/ext/up_ext/HttpResponseData.h +95 -0
  18. data/ext/up_ext/HttpRouter.h +380 -0
  19. data/ext/up_ext/Loop.h +204 -0
  20. data/ext/up_ext/LoopData.h +112 -0
  21. data/ext/up_ext/MoveOnlyFunction.h +377 -0
  22. data/ext/up_ext/PerMessageDeflate.h +315 -0
  23. data/ext/up_ext/ProxyParser.h +163 -0
  24. data/ext/up_ext/QueryParser.h +120 -0
  25. data/ext/up_ext/TopicTree.h +363 -0
  26. data/ext/up_ext/Utilities.h +66 -0
  27. data/ext/up_ext/WebSocket.h +381 -0
  28. data/ext/up_ext/WebSocketContext.h +434 -0
  29. data/ext/up_ext/WebSocketContextData.h +109 -0
  30. data/ext/up_ext/WebSocketData.h +86 -0
  31. data/ext/up_ext/WebSocketExtensions.h +256 -0
  32. data/ext/up_ext/WebSocketHandshake.h +145 -0
  33. data/ext/up_ext/WebSocketProtocol.h +506 -0
  34. data/ext/up_ext/bsd.c +767 -0
  35. data/ext/up_ext/bsd.h +109 -0
  36. data/ext/up_ext/context.c +524 -0
  37. data/ext/up_ext/epoll_kqueue.c +458 -0
  38. data/ext/up_ext/epoll_kqueue.h +67 -0
  39. data/ext/up_ext/extconf.rb +5 -0
  40. data/ext/up_ext/internal.h +224 -0
  41. data/ext/up_ext/libusockets.h +350 -0
  42. data/ext/up_ext/libuwebsockets.cpp +1344 -0
  43. data/ext/up_ext/libuwebsockets.h +396 -0
  44. data/ext/up_ext/loop.c +386 -0
  45. data/ext/up_ext/loop_data.h +38 -0
  46. data/ext/up_ext/socket.c +231 -0
  47. data/ext/up_ext/up_ext.c +930 -0
  48. data/lib/up/bun/rack_env.rb +1 -13
  49. data/lib/up/bun/server.rb +93 -19
  50. data/lib/up/cli.rb +3 -0
  51. data/lib/up/client.rb +68 -0
  52. data/lib/up/ruby/cluster.rb +39 -0
  53. data/lib/up/ruby/cluster_cli.rb +10 -0
  54. data/lib/up/{node → ruby}/rack_cluster.rb +5 -4
  55. data/lib/up/{node → ruby}/rack_server.rb +4 -4
  56. data/lib/up/ruby/server_cli.rb +10 -0
  57. data/lib/up/u_web_socket/cluster.rb +18 -3
  58. data/lib/up/u_web_socket/server.rb +108 -15
  59. data/lib/up/version.rb +1 -1
  60. metadata +72 -30
  61. data/.gitignore +0 -5
  62. data/Gemfile +0 -2
  63. data/bin/up_node +0 -12
  64. data/bin/up_node_cluster +0 -12
  65. data/example_rack_app/Gemfile +0 -3
  66. data/example_rack_app/config.ru +0 -6
  67. data/example_rack_app/rack_app.rb +0 -5
  68. data/example_roda_app/Gemfile +0 -6
  69. data/example_roda_app/config.ru +0 -6
  70. data/example_roda_app/roda_app.rb +0 -37
  71. data/example_sinatra_app/Gemfile +0 -6
  72. data/example_sinatra_app/config.ru +0 -6
  73. data/example_sinatra_app/sinatra_app.rb +0 -7
  74. data/lib/up/node/cluster.rb +0 -39
  75. data/lib/up/node/cluster_cli.rb +0 -15
  76. data/lib/up/node/rack_env.rb +0 -106
  77. data/lib/up/node/server.rb +0 -84
  78. data/lib/up/node/server_cli.rb +0 -15
  79. data/lib/up/u_web_socket/rack_env.rb +0 -101
  80. data/opal-up.gemspec +0 -27
  81. data/up_logo.svg +0 -256
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-up
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-03 00:00:00.000000000 Z
11
+ date: 2024-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger
@@ -92,6 +92,20 @@ dependencies:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
94
  version: 13.1.0
95
+ - !ruby/object:Gem::Dependency
96
+ name: rake-compiler
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: 1.2.7
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: 1.2.7
95
109
  - !ruby/object:Gem::Dependency
96
110
  name: rspec
97
111
  requirement: !ruby/object:Gem::Requirement
@@ -106,59 +120,87 @@ dependencies:
106
120
  - - "~>"
107
121
  - !ruby/object:Gem::Version
108
122
  version: 3.12.0
109
- description: High performance Rack server for Opal Ruby
123
+ description: High performance Rack server for Opal and Ruby
110
124
  email:
111
125
  - jan@kursator.de
112
126
  executables:
113
127
  - up
114
128
  - up_bun
115
129
  - up_cluster
116
- - up_node
117
- - up_node_cluster
118
- extensions: []
130
+ - up_ruby
131
+ - up_ruby_cluster
132
+ extensions:
133
+ - ext/up_ext/extconf.rb
119
134
  extra_rdoc_files: []
120
135
  files:
121
- - ".gitignore"
122
- - Gemfile
123
136
  - LICENSE
124
137
  - README.md
125
138
  - bin/up
126
139
  - bin/up_bun
127
140
  - bin/up_cluster
128
- - bin/up_node
129
- - bin/up_node_cluster
130
- - example_rack_app/Gemfile
131
- - example_rack_app/config.ru
132
- - example_rack_app/rack_app.rb
133
- - example_roda_app/Gemfile
134
- - example_roda_app/config.ru
135
- - example_roda_app/roda_app.rb
136
- - example_sinatra_app/Gemfile
137
- - example_sinatra_app/config.ru
138
- - example_sinatra_app/sinatra_app.rb
141
+ - bin/up_ruby
142
+ - bin/up_ruby_cluster
143
+ - ext/up_ext/App.h
144
+ - ext/up_ext/AsyncSocket.h
145
+ - ext/up_ext/AsyncSocketData.h
146
+ - ext/up_ext/BloomFilter.h
147
+ - ext/up_ext/ChunkedEncoding.h
148
+ - ext/up_ext/ClientApp.h
149
+ - ext/up_ext/HttpContext.h
150
+ - ext/up_ext/HttpContextData.h
151
+ - ext/up_ext/HttpErrors.h
152
+ - ext/up_ext/HttpParser.h
153
+ - ext/up_ext/HttpResponse.h
154
+ - ext/up_ext/HttpResponseData.h
155
+ - ext/up_ext/HttpRouter.h
156
+ - ext/up_ext/Loop.h
157
+ - ext/up_ext/LoopData.h
158
+ - ext/up_ext/MoveOnlyFunction.h
159
+ - ext/up_ext/PerMessageDeflate.h
160
+ - ext/up_ext/ProxyParser.h
161
+ - ext/up_ext/QueryParser.h
162
+ - ext/up_ext/TopicTree.h
163
+ - ext/up_ext/Utilities.h
164
+ - ext/up_ext/WebSocket.h
165
+ - ext/up_ext/WebSocketContext.h
166
+ - ext/up_ext/WebSocketContextData.h
167
+ - ext/up_ext/WebSocketData.h
168
+ - ext/up_ext/WebSocketExtensions.h
169
+ - ext/up_ext/WebSocketHandshake.h
170
+ - ext/up_ext/WebSocketProtocol.h
171
+ - ext/up_ext/bsd.c
172
+ - ext/up_ext/bsd.h
173
+ - ext/up_ext/context.c
174
+ - ext/up_ext/epoll_kqueue.c
175
+ - ext/up_ext/epoll_kqueue.h
176
+ - ext/up_ext/extconf.rb
177
+ - ext/up_ext/internal.h
178
+ - ext/up_ext/libusockets.h
179
+ - ext/up_ext/libuwebsockets.cpp
180
+ - ext/up_ext/libuwebsockets.h
181
+ - ext/up_ext/loop.c
182
+ - ext/up_ext/loop_data.h
183
+ - ext/up_ext/socket.c
184
+ - ext/up_ext/up_ext.c
139
185
  - lib/up/bun/rack_env.rb
140
186
  - lib/up/bun/rack_server.rb
141
187
  - lib/up/bun/server.rb
142
188
  - lib/up/bun/server_cli.rb
143
189
  - lib/up/cli.rb
144
- - lib/up/node/cluster.rb
145
- - lib/up/node/cluster_cli.rb
146
- - lib/up/node/rack_cluster.rb
147
- - lib/up/node/rack_env.rb
148
- - lib/up/node/rack_server.rb
149
- - lib/up/node/server.rb
150
- - lib/up/node/server_cli.rb
190
+ - lib/up/client.rb
151
191
  - lib/up/rack_builder_patch.rb
192
+ - lib/up/ruby/cluster.rb
193
+ - lib/up/ruby/cluster_cli.rb
194
+ - lib/up/ruby/rack_cluster.rb
195
+ - lib/up/ruby/rack_server.rb
196
+ - lib/up/ruby/server_cli.rb
152
197
  - lib/up/u_web_socket/cluster.rb
153
198
  - lib/up/u_web_socket/cluster_cli.rb
154
199
  - lib/up/u_web_socket/rack_cluster.rb
155
- - lib/up/u_web_socket/rack_env.rb
156
200
  - lib/up/u_web_socket/rack_server.rb
157
201
  - lib/up/u_web_socket/server.rb
158
202
  - lib/up/u_web_socket/server_cli.rb
159
203
  - lib/up/version.rb
160
- - opal-up.gemspec
161
- - up_logo.svg
162
204
  homepage: ''
163
205
  licenses:
164
206
  - MIT
@@ -171,7 +213,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
213
  requirements:
172
214
  - - ">="
173
215
  - !ruby/object:Gem::Version
174
- version: '0'
216
+ version: 3.0.0
175
217
  required_rubygems_version: !ruby/object:Gem::Requirement
176
218
  requirements:
177
219
  - - ">="
data/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- node_modules
2
- Gemfile.lock
3
- package-lock.json
4
- package.json
5
- *.gem
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
data/bin/up_node DELETED
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- if RUBY_ENGINE == 'opal'
4
- require 'up/node/server_cli'
5
- Up::CLI.call
6
- else
7
- require 'up/cli'
8
- Up::CLI.setup_node
9
- lib_dir = File.expand_path("#{__dir__}/../lib")
10
- gems = Up::CLI.get_gems_for_cmd
11
- Kernel.exec("opal -Rnodejs -E -I. -I#{lib_dir} -g rack #{gems} #{__FILE__} -- #{ARGV.join(' ')}")
12
- end
data/bin/up_node_cluster DELETED
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- if RUBY_ENGINE == 'opal'
4
- require 'up/node/cluster_cli'
5
- Up::CLI.call
6
- else
7
- require 'up/cli'
8
- Up::CLI.setup_node
9
- lib_dir = File.expand_path("#{__dir__}/../lib")
10
- gems = Up::CLI.get_gems_for_cmd
11
- Kernel.exec("opal -Rnodejs -E -I. -I#{lib_dir} -g rack #{gems} #{__FILE__} -- #{ARGV.join(' ')}")
12
- end
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'opal-up', path: '../'
@@ -1,6 +0,0 @@
1
- require_relative 'rack_app'
2
- if defined? RubyVM
3
- # ensure up contenders use a JIT
4
- RubyVM::YJIT.enable
5
- end
6
- run RackApp
@@ -1,5 +0,0 @@
1
- class RackApp
2
- def self.call(env)
3
- [200, {}, [env.to_s]]
4
- end
5
- end
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- gem 'rack', path: '../../rack'
5
- gem 'opal-up', path: '../'
6
- gem 'roda', path: '../../roda'
@@ -1,6 +0,0 @@
1
- require_relative 'roda_app'
2
- if defined? RubyVM
3
- # ensure up contenders use a JIT
4
- RubyVM::YJIT.enable
5
- end
6
- run RodaApp.freeze
@@ -1,37 +0,0 @@
1
- require "roda"
2
-
3
- class RodaApp < Roda
4
- STDERR.puts "executing route"
5
- route do |r|
6
- STDERR.puts r
7
- # GET / request
8
- r.root do
9
- r.redirect "/hello"
10
- end
11
-
12
- # /hello branch
13
- r.on "hello" do
14
- # Set variable for all routes in /hello branch
15
- @greeting = 'Hello'
16
-
17
- # GET /hello/world request
18
- r.get "world" do
19
- "#{@greeting} world!"
20
- end
21
-
22
- # /hello request
23
- r.is do
24
- # GET /hello request
25
- r.get do
26
- "#{@greeting}!"
27
- end
28
-
29
- # POST /hello request
30
- r.post do
31
- puts "Someone said #{@greeting}!"
32
- r.redirect
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- gem 'opal', github: 'opal/opal'
5
- gem 'opal-up', path: '../'
6
- gem 'sinatra'
@@ -1,6 +0,0 @@
1
- require_relative 'sinatra_app'
2
- if defined? RubyVM
3
- # ensure up contenders use a JIT
4
- RubyVM::YJIT.enable
5
- end
6
- run SinatraApp
@@ -1,7 +0,0 @@
1
- require 'sinatra/base'
2
-
3
- class SinatraApp
4
- get '/' do
5
- 'Hello world!'
6
- end
7
- end
@@ -1,39 +0,0 @@
1
- # backtick_javascript: true
2
- require 'up/node/server'
3
-
4
- %x{
5
- const cluster = require('node:cluster');
6
- const num_workers = require('node:os').availableParallelism();
7
- }
8
-
9
- module Up
10
- module Node
11
- class Cluster < Up::Node::Server
12
- def initialize(app:, host: 'localhost', port: 3000, scheme: 'http', ca_file: nil, cert_file: nil, key_file: nil, workers: nil)
13
- super(app: app, host: host, port: port, scheme: scheme, ca_file: ca_file, cert_file: cert_file, key_file: key_file)
14
- @workers = workers || `num_workers`
15
- @members = []
16
- end
17
-
18
- def listen
19
- raise "already running" unless @members.empty?
20
- %x{
21
- if (cluster.isPrimary) {
22
- for (let i = 0; i < #@workers; i++) {
23
- #@members.push(cluster.fork());
24
- }
25
- } else {
26
- #{super}
27
- }
28
- }
29
- end
30
-
31
- def stop
32
- if Up::CLI::stoppable?
33
- @members.each { |m| `m.kill()` }
34
- @members.clear
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,15 +0,0 @@
1
- require 'opal/platform'
2
- require 'nodejs/file'
3
- require 'nodejs/require'
4
- require 'opal-parser'
5
- require 'rack/builder'
6
- require 'up/rack_builder_patch'
7
- require 'up/node/rack_cluster'
8
-
9
- module Up
10
- module CLI
11
- def self.call
12
- Up::Node::RackCluster.run(get_app, get_options)
13
- end
14
- end
15
- end
@@ -1,106 +0,0 @@
1
- # backtick_javascript: true
2
-
3
- require 'logger'
4
- require 'up/version'
5
-
6
- module Up
7
- module Node
8
- class RackEnv < ::Hash
9
- RACK_VARS = %w[rack.errors rack.hijack rack.hijack? rack.input rack.logger
10
- rack.multipart.buffer_size rack.multipart.tempfile_factory
11
- rack.response_finished
12
- rack.session rack.upgrade rack.upgrade? rack.url_scheme
13
- HTTP_ACCEPT HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE
14
- HTTP_CONNECTION HTTP_HOST HTTP_USER_AGENT HTTP_VERSION PATH_INFO QUERY_STRING REQUEST_METHOD
15
- SCRIPT_NAME SERVER_NAME SERVER_PROTOCOL SERVER_SOFTWARE]
16
- def initialize(req, config)
17
- @req = req
18
- @config = config
19
- end
20
-
21
- def [](key)
22
- return super(key) if key?(key)
23
- self[key] = case key
24
- when 'rack.errors'
25
- STDERR
26
- when 'rack.hijack'
27
- nil
28
- when 'rack.hijack?'
29
- false
30
- when 'rack.input'
31
- ::IO.new
32
- when 'rack.logger'
33
- ::Logger.new(self['rack.errors'])
34
- when 'rack.multipart.buffer_size'
35
- 4096
36
- when 'rack.multipart.tempfile_factory'
37
- proc { |_filename, _content_type| File.new }
38
- when 'rack.response_finished'
39
- []
40
- when 'rack.session'
41
- {}
42
- when 'rack.upgrade'
43
- nil
44
- when 'rack.upgrade?'
45
- nil
46
- when 'rack.url_scheme'
47
- @config[:scheme]
48
- when 'HTTP_VERSION'
49
- `#@reg.httpVersion`
50
- when 'PATH_INFO'
51
- `#@req.url`
52
- when 'QUERY_STRING'
53
- ""
54
- when 'RACK_ERRORS'
55
- self['rack.errors']
56
- when 'RACK_LOGGER'
57
- self['rack.logger']
58
- when 'REQUEST_METHOD'
59
- `#@req.method`
60
- when 'SCRIPT_NAME'
61
- ""
62
- when 'SERVER_NAME'
63
- @config[:host]
64
- when 'SERVER_PORT'
65
- @config[:port].to_s
66
- when 'SERVER_PROTOCOL'
67
- ""
68
- when 'SERVER_SOFTWARE'
69
- "#{@config[:handler]}/#{Up::VERSION} #{@config[:engine]}"
70
- else
71
- if key.start_with?('HTTP_')
72
- key = key[5..].gsub(/_/, '-')
73
- `#@req.headers[key.toLowerCase()]`
74
- else
75
- nil
76
- end
77
- end
78
- end
79
-
80
- def req_headers
81
- h = {}
82
- %x{
83
- var hdr, hds = #@req.headers;
84
- for (hdr in hds) { h.set(hdr, hdrs[hdr]); }
85
- }
86
- h
87
- end
88
-
89
- def each
90
- unless @got_them_all
91
- RACK_VARS.each { |k| self[k] unless self.key?(k) }
92
- @got_them_all = true
93
- end
94
- super
95
- end
96
-
97
- def to_s
98
- unless @got_them_all
99
- RACK_VARS.each { |k| self[k] unless self.key?(k) }
100
- @got_them_all = true
101
- end
102
- super
103
- end
104
- end
105
- end
106
- end
@@ -1,84 +0,0 @@
1
- # backtick_javascript: true
2
- require 'up/cli'
3
- require 'up/node/rack_env'
4
-
5
- %x{
6
- module.paths.push(process.cwd() + '/node_modules');
7
- const http = require('node:http');
8
- const https = require('node:https');
9
- const fs = require('node:fs');
10
- }
11
-
12
- module Up
13
- module Node
14
- class Server
15
- def initialize(app:, host: 'localhost', port: 3000, scheme: 'http', ca_file: nil, cert_file: nil, key_file: nil)
16
- @app = app
17
- @scheme = scheme || 'http'
18
- raise "unsupported scheme #{@scheme}" unless %w[http https].include?(@scheme)
19
- @host = host || 'localhost'
20
- @port = port&.to_i || 3000
21
- @config = { handler: self.class.name, engine: "node/#{`process.version`}", port: port, scheme: scheme, host: host }.freeze
22
- @ca_file = ca_file
23
- @cert_file = cert_file
24
- @key_file = key_file
25
- @server = nil
26
- end
27
-
28
- %x{
29
- self.handle_headers = function(rack_headers, srv_res) {
30
- if (rack_headers.$$is_hash) {
31
- var header, k, v;
32
- for(header of rack_headers) {
33
- k = header[0];
34
- if (!k.startsWith('rack.')) {
35
- v = header[1];
36
- if (v.$$is_array) {
37
- v = v.join("\n");
38
- }
39
- srv_res.setHeader(k, v);
40
- }
41
- }
42
- }
43
- }
44
-
45
- self.handle_response = function(parts, srv_res) {
46
- if (parts["$respond_to?"]('each')) {
47
- #{`parts`.each { |part| `srv_res.write(part)` }}
48
- } else if (parts["$respond_to?"]('call')) {
49
- srv_res.write(parts.$call());
50
- }
51
- #{`parts`.close if `parts`.respond_to?(:close)}
52
- }
53
- }
54
-
55
- def listen
56
- raise "already running" if @server
57
- %x{
58
- const ounr = Opal.Up.Node.RackEnv;
59
- const ouns = Opal.Up.Node.Server;
60
- function handler(req, res) {
61
- const rack_res = #@app.$call(ounr.$new(req, #@config));
62
- res.statusCode = rack_res[0];
63
- ouns.handle_headers(rack_res[1], res);
64
- ouns.handle_response(rack_res[2], res);
65
- res.end();
66
- }
67
- if (#@scheme == 'https') {
68
- #@server = https.createServer({ ca: fs.readFileSync(#@ca_file), cert: fs.readFileSync(#@cert_file), key: fs.readFileSync(#@key_file) }, handler);
69
- } else {
70
- #@server = http.createServer(handler);
71
- }
72
- #@server.listen(#@port, #@host, () => { console.log(`Server is running on ${#@scheme}://${#@host}:${#@port}`)});
73
- }
74
- end
75
-
76
- def stop
77
- if Up::CLI::stoppable?
78
- `#@server.close()`
79
- @server = nil
80
- end
81
- end
82
- end
83
- end
84
- end
@@ -1,15 +0,0 @@
1
- require 'opal/platform'
2
- require 'nodejs/file'
3
- require 'nodejs/require'
4
- require 'opal-parser'
5
- require 'rack/builder'
6
- require 'up/rack_builder_patch'
7
- require 'up/node/rack_server'
8
-
9
- module Up
10
- module CLI
11
- def self.call
12
- Up::Node::RackServer.run(get_app, get_options)
13
- end
14
- end
15
- end
@@ -1,101 +0,0 @@
1
- # backtick_javascript: true
2
-
3
- require 'logger'
4
- require 'up/version'
5
-
6
- module Up
7
- module UWebSocket
8
- class RackEnv < ::Hash
9
- RACK_VARS = %w[rack.errors rack.hijack rack.hijack? rack.input rack.logger
10
- rack.multipart.buffer_size rack.multipart.tempfile_factory
11
- rack.response_finished
12
- rack.session rack.upgrade rack.upgrade? rack.url_scheme
13
- HTTP_ACCEPT HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE
14
- HTTP_CONNECTION HTTP_HOST HTTP_USER_AGENT PATH_INFO QUERY_STRING REQUEST_METHOD
15
- SCRIPT_NAME SERVER_NAME SERVER_PROTOCOL SERVER_SOFTWARE]
16
- def initialize(req, config)
17
- @req = req
18
- @config = config
19
- end
20
-
21
- def [](key)
22
- return super(key) if key?(key)
23
- self[key] = case key
24
- when 'rack.errors'
25
- STDERR
26
- when 'rack.hijack'
27
- nil
28
- when 'rack.hijack?'
29
- false
30
- when 'rack.input'
31
- ::IO.new
32
- when 'rack.logger'
33
- ::Logger.new(self['rack.errors'])
34
- when 'rack.multipart.buffer_size'
35
- 4096
36
- when 'rack.multipart.tempfile_factory'
37
- proc { |_filename, _content_type| File.new }
38
- when 'rack.response_finished'
39
- []
40
- when 'rack.session'
41
- {}
42
- when 'rack.upgrade'
43
- nil
44
- when 'rack.upgrade?'
45
- nil
46
- when 'rack.url_scheme'
47
- @config[:scheme]
48
- when 'PATH_INFO'
49
- `#@req.getUrl()`
50
- when 'QUERY_STRING'
51
- `#@req.getQuery()`
52
- when 'RACK_ERRORS'
53
- self['rack.errors']
54
- when 'RACK_LOGGER'
55
- self['rack.logger']
56
- when 'REQUEST_METHOD'
57
- `#@req.getMethod().toUpperCase()`
58
- when 'SCRIPT_NAME'
59
- ""
60
- when 'SERVER_NAME'
61
- @config[:host]
62
- when 'SERVER_PORT'
63
- @config[:port].to_s
64
- when 'SERVER_PROTOCOL'
65
- `#@req.getHeader('protocol')`
66
- when 'SERVER_SOFTWARE'
67
- "#{@config[:handler]}/#{Up::VERSION} #{@config[:engine]}"
68
- else
69
- if key.start_with?('HTTP_')
70
- key = key[5..].gsub(/_/, '-')
71
- `#@req.getHeader(key.toLowerCase())`
72
- else
73
- nil
74
- end
75
- end
76
- end
77
-
78
- def req_headers
79
- h = {}
80
- `#@req.forEach((k, v) => { h.set(k, v); })`
81
- h
82
- end
83
-
84
- def each
85
- unless @got_them_all
86
- RACK_VARS.each { |k| self[k] unless self.key?(k) }
87
- @got_them_all = true
88
- end
89
- super
90
- end
91
-
92
- def to_s
93
- unless @got_them_all
94
- RACK_VARS.each { |k| self[k] unless self.key?(k) }
95
- @got_them_all = true
96
- end
97
- super
98
- end
99
- end
100
- end
101
- end