tipi 0.54 → 0.56
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/.github/workflows/test.yml +3 -3
- data/CHANGELOG.md +13 -0
- data/Gemfile.lock +64 -46
- data/TODO.md +6 -64
- data/lib/tipi/controller/extensions.rb +1 -1
- data/lib/tipi/controller/web_polyphony.rb +5 -5
- data/lib/tipi/controller/web_stock.rb +3 -3
- data/lib/tipi/digital_fabric/agent.rb +1 -1
- data/lib/tipi/http1_adapter.rb +3 -8
- data/lib/tipi/supervisor.rb +1 -1
- data/lib/tipi/version.rb +1 -1
- data/test/helper.rb +1 -1
- data/test/test_http_server.rb +7 -2
- data/test/test_request.rb +1 -1
- data/tipi.gemspec +23 -17
- metadata +92 -40
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 358e5c2ab73c2404872237b4dbd53907f0523a3803f7bdbcbc256508b59130fa
|
|
4
|
+
data.tar.gz: 7e1d49d54ee1317ec137ff66014a619108e2c28a276f1374db9632b212ae405c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 86e328e8fd7c6185dd027a47a592675cc59ca4e53aeeb80847b5e8b931df1011561b086414599512fe230e28a6d3a8c4cb5226be6279628dada1cfb5f6503528
|
|
7
|
+
data.tar.gz: fa4cdfd25fc5790fb06cf770b7791d830b9f3c9ce751f1cf8fd25ca28fc56e839766a4c5d886b20515192d753e02f28596d20a97268fd7485bc9329fa792ab85
|
data/.github/workflows/test.yml
CHANGED
|
@@ -8,15 +8,15 @@ jobs:
|
|
|
8
8
|
fail-fast: false
|
|
9
9
|
matrix:
|
|
10
10
|
os: [ubuntu-latest, macos-latest]
|
|
11
|
-
ruby: ['3.
|
|
11
|
+
ruby: ['3.2', '3.3', '3.4', 'head']
|
|
12
12
|
|
|
13
13
|
name: >-
|
|
14
14
|
${{matrix.os}}, ${{matrix.ruby}}
|
|
15
15
|
|
|
16
16
|
runs-on: ${{matrix.os}}
|
|
17
17
|
|
|
18
|
-
env:
|
|
19
|
-
|
|
18
|
+
# env:
|
|
19
|
+
# POLYPHONY_LIBEV: "1"
|
|
20
20
|
|
|
21
21
|
steps:
|
|
22
22
|
- name: Setup machine
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
## 0.56 2025-10-21
|
|
2
|
+
|
|
3
|
+
- Update localhost, acme-client, websocket, http-2, extralite, qeweney, rack, bundler dependencies (#35)
|
|
4
|
+
- Drop support for Ruby 3.1 (#35)
|
|
5
|
+
- Add support for Ruby 3.3 and 3.4 (#35)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## 0.55 2023-07-29
|
|
9
|
+
|
|
10
|
+
- Simplify HTTP/1 exception handling
|
|
11
|
+
- Update H1P dependency
|
|
12
|
+
- Update Extralite dependency (#28)
|
|
13
|
+
|
|
1
14
|
## 0.54 2023-05-28
|
|
2
15
|
|
|
3
16
|
- Use `H1P.send_response` for sending response
|
data/Gemfile.lock
CHANGED
|
@@ -1,67 +1,85 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
tipi (0.
|
|
5
|
-
acme-client (~> 2.0.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
4
|
+
tipi (0.56)
|
|
5
|
+
acme-client (~> 2.0.26)
|
|
6
|
+
base64 (~> 0.3)
|
|
7
|
+
ever (~> 0.2)
|
|
8
|
+
extralite (~> 2.13)
|
|
9
|
+
h1p (~> 1.1)
|
|
10
|
+
http-2 (~> 1.1)
|
|
11
|
+
localhost (~> 1.6.0)
|
|
12
|
+
msgpack (~> 1.8.0)
|
|
13
|
+
mutex_m (~> 0.3)
|
|
14
|
+
polyphony (~> 1.4)
|
|
15
|
+
qeweney (~> 0.24)
|
|
16
|
+
rack (>= 2.0.8, < 3.3.0)
|
|
17
|
+
websocket (~> 1.2.11)
|
|
16
18
|
|
|
17
19
|
GEM
|
|
18
20
|
remote: https://rubygems.org/
|
|
19
21
|
specs:
|
|
20
|
-
acme-client (2.0.
|
|
22
|
+
acme-client (2.0.26)
|
|
23
|
+
base64 (~> 0.2)
|
|
21
24
|
faraday (>= 1.0, < 3.0.0)
|
|
22
25
|
faraday-retry (>= 1.0, < 3.0.0)
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
base64 (0.3.0)
|
|
27
|
+
cuba (4.0.3)
|
|
28
|
+
rack (>= 3.0.0)
|
|
29
|
+
rack-session (>= 2.0.0)
|
|
25
30
|
docile (1.4.0)
|
|
26
|
-
escape_utils (1.
|
|
31
|
+
escape_utils (1.3.0)
|
|
27
32
|
ever (0.2)
|
|
28
|
-
extralite (
|
|
29
|
-
faraday (2.
|
|
30
|
-
faraday-net_http (>= 2.0, < 3.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
faraday-
|
|
33
|
+
extralite (2.13)
|
|
34
|
+
faraday (2.14.0)
|
|
35
|
+
faraday-net_http (>= 2.0, < 3.5)
|
|
36
|
+
json
|
|
37
|
+
logger
|
|
38
|
+
faraday-net_http (3.4.1)
|
|
39
|
+
net-http (>= 0.5.0)
|
|
40
|
+
faraday-retry (2.3.2)
|
|
34
41
|
faraday (~> 2.0)
|
|
35
|
-
h1p (
|
|
36
|
-
http-2 (
|
|
37
|
-
json (2.
|
|
38
|
-
localhost (1.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
h1p (1.1)
|
|
43
|
+
http-2 (1.1.1)
|
|
44
|
+
json (2.15.1)
|
|
45
|
+
localhost (1.6.0)
|
|
46
|
+
logger (1.7.0)
|
|
47
|
+
memory_profiler (1.1.0)
|
|
48
|
+
minitest (5.26.0)
|
|
49
|
+
msgpack (1.8.0)
|
|
50
|
+
mutex_m (0.3.0)
|
|
51
|
+
net-http (0.6.0)
|
|
52
|
+
uri
|
|
53
|
+
ostruct (0.6.3)
|
|
54
|
+
polyphony (1.4)
|
|
55
|
+
qeweney (0.24)
|
|
56
|
+
escape_utils (= 1.3.0)
|
|
57
|
+
rack (3.2.3)
|
|
58
|
+
rack-session (2.1.1)
|
|
59
|
+
base64 (>= 0.1.0)
|
|
60
|
+
rack (>= 3.0.0)
|
|
61
|
+
rake (13.3.0)
|
|
62
|
+
simplecov (0.22.0)
|
|
49
63
|
docile (~> 1.1)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
simplecov-html (0.
|
|
53
|
-
|
|
64
|
+
simplecov-html (~> 0.11)
|
|
65
|
+
simplecov_json_formatter (~> 0.1)
|
|
66
|
+
simplecov-html (0.12.3)
|
|
67
|
+
simplecov_json_formatter (0.1.4)
|
|
68
|
+
uri (1.0.4)
|
|
69
|
+
websocket (1.2.11)
|
|
54
70
|
|
|
55
71
|
PLATFORMS
|
|
56
72
|
ruby
|
|
57
73
|
|
|
58
74
|
DEPENDENCIES
|
|
59
|
-
cuba (~>
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
75
|
+
cuba (~> 4.0.3)
|
|
76
|
+
logger (~> 1.7)
|
|
77
|
+
memory_profiler (~> 1.1.0)
|
|
78
|
+
minitest (~> 5.26.0)
|
|
79
|
+
ostruct (~> 0.3)
|
|
80
|
+
rake (~> 13.3.0)
|
|
81
|
+
simplecov (~> 0.22.0)
|
|
64
82
|
tipi!
|
|
65
83
|
|
|
66
84
|
BUNDLED WITH
|
|
67
|
-
2.
|
|
85
|
+
2.7.2
|
data/TODO.md
CHANGED
|
@@ -1,52 +1,12 @@
|
|
|
1
|
-
##
|
|
1
|
+
## Rethink design
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
chunk = req.next_chunk
|
|
6
|
-
# or
|
|
7
|
-
req.each_chunk { |c| do_something(c) }
|
|
3
|
+
- Remove DF code
|
|
4
|
+
- Remove non-Polyphony code
|
|
8
5
|
|
|
9
|
-
|
|
10
|
-
r, w = IO.pipe
|
|
11
|
-
len = req.splice_chunk(w)
|
|
12
|
-
sock << "Here comes a chunk of #{len} bytes\n"
|
|
13
|
-
sock.splice(r, len)
|
|
6
|
+
# Miscellaneous
|
|
14
7
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
req.splice_each_chunk(w) do |len|
|
|
18
|
-
sock << "Here comes a chunk of #{len} bytes\n"
|
|
19
|
-
sock.splice(r, len)
|
|
20
|
-
end
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
# HTTP/1.1 parser
|
|
24
|
-
|
|
25
|
-
- httparser.rb is not actively updated
|
|
26
|
-
- the httparser.rb C parser code comes originally from https://github.com/nodejs/llhttp
|
|
27
|
-
- there's a Ruby gem https://github.com/metabahn/llhttp, but its API is too low-level
|
|
28
|
-
(lots of callbacks, headers need to be retained across callbacks)
|
|
29
|
-
- the basic idea is to import the C-code, then build a parser object with the following
|
|
30
|
-
callbacks:
|
|
31
|
-
|
|
32
|
-
```ruby
|
|
33
|
-
on_headers_complete(headers)
|
|
34
|
-
on_body_chunk(chunk)
|
|
35
|
-
on_message_complete
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
- The llhttp gem's C-code is here: https://github.com/metabahn/llhttp/tree/main/mri
|
|
39
|
-
|
|
40
|
-
- Actually, if you do a C extension, instead of a callback-based API, we can
|
|
41
|
-
design a blocking API:
|
|
42
|
-
|
|
43
|
-
```ruby
|
|
44
|
-
parser = Tipi::HTTP1::Parser.new
|
|
45
|
-
parser.each_request(socket) do |headers|
|
|
46
|
-
request = Request.new(normalize_headers(headers))
|
|
47
|
-
handle_request(request)
|
|
48
|
-
end
|
|
49
|
-
```
|
|
8
|
+
- Try using `TCP_DEFER_ACCEPT` with Polyphony on io_uring - does it provide any
|
|
9
|
+
performance benefit?
|
|
50
10
|
|
|
51
11
|
# What about HTTP/2?
|
|
52
12
|
|
|
@@ -61,26 +21,8 @@ end
|
|
|
61
21
|
```
|
|
62
22
|
|
|
63
23
|
|
|
64
|
-
|
|
65
|
-
# DF
|
|
66
|
-
|
|
67
|
-
- Add attack protection for IP-address HTTP host:
|
|
68
|
-
|
|
69
|
-
```ruby
|
|
70
|
-
IPV4_REGEXP = /^\d+\.\d+\.\d+\.\d+$/.freeze
|
|
71
|
-
|
|
72
|
-
def is_attack_request?(req)
|
|
73
|
-
return true if req.host =~ IPV4_REGEXP && req.query[:q] != 'ping'
|
|
74
|
-
end
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
- Add attack route to Qeweney routing API
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
24
|
# Roadmap
|
|
82
25
|
|
|
83
|
-
- Update README (get rid of non-http stuff)
|
|
84
26
|
- Improve Rack spec compliance, add tests
|
|
85
27
|
- Homogenize HTTP 1 and HTTP 2 headers - downcase symbols
|
|
86
28
|
|
|
@@ -38,10 +38,10 @@ module Tipi
|
|
|
38
38
|
# TODO: find out how Terminate can leak like that (it's supposed to be
|
|
39
39
|
# caught in Fiber#run)
|
|
40
40
|
end
|
|
41
|
-
trap('SIGTERM') { supervisor.terminate(true) }
|
|
41
|
+
trap('SIGTERM') { supervisor.terminate(graceful: true) }
|
|
42
42
|
trap('SIGINT') do
|
|
43
43
|
trap('SIGINT') { exit! }
|
|
44
|
-
supervisor.terminate(true)
|
|
44
|
+
supervisor.terminate(graceful: true)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
supervisor.await
|
|
@@ -51,10 +51,10 @@ module Tipi
|
|
|
51
51
|
|
|
52
52
|
def run_worker
|
|
53
53
|
server = start_server(@service)
|
|
54
|
-
trap('SIGTERM') { server&.terminate(true) }
|
|
54
|
+
trap('SIGTERM') { server&.terminate(graceful: true) }
|
|
55
55
|
trap('SIGINT') do
|
|
56
56
|
trap('SIGINT') { exit! }
|
|
57
|
-
server&.terminate(true)
|
|
57
|
+
server&.terminate(graceful: true)
|
|
58
58
|
end
|
|
59
59
|
raise 'Server not started' unless server
|
|
60
60
|
server.await
|
|
@@ -292,7 +292,7 @@ module Tipi
|
|
|
292
292
|
fiber.attach_all_children_to(supervisor)
|
|
293
293
|
|
|
294
294
|
# terminating the supervisor will
|
|
295
|
-
supervisor.terminate(true)
|
|
295
|
+
supervisor.terminate(graceful: true)
|
|
296
296
|
end
|
|
297
297
|
|
|
298
298
|
def add_connection_headers(app)
|
|
@@ -295,10 +295,10 @@ module Tipi
|
|
|
295
295
|
# TODO: find out how Terminate can leak like that (it's supposed to be
|
|
296
296
|
# caught in Fiber#run)
|
|
297
297
|
end
|
|
298
|
-
# trap('SIGTERM') { supervisor.terminate(true) }
|
|
298
|
+
# trap('SIGTERM') { supervisor.terminate(graceful: true) }
|
|
299
299
|
# trap('SIGINT') do
|
|
300
300
|
# trap('SIGINT') { exit! }
|
|
301
|
-
# supervisor.terminate(true)
|
|
301
|
+
# supervisor.terminate(graceful: true)
|
|
302
302
|
# end
|
|
303
303
|
|
|
304
304
|
# supervisor.await
|
|
@@ -577,7 +577,7 @@ module Tipi
|
|
|
577
577
|
fiber.attach_all_children_to(supervisor)
|
|
578
578
|
|
|
579
579
|
# terminating the supervisor will
|
|
580
|
-
supervisor.terminate(true)
|
|
580
|
+
supervisor.terminate(graceful: true)
|
|
581
581
|
end
|
|
582
582
|
|
|
583
583
|
def add_connection_headers(app)
|
|
@@ -162,7 +162,7 @@ module DigitalFabric
|
|
|
162
162
|
# puts "Received shutdown message (#{@requests.size} pending requests)"
|
|
163
163
|
# puts " (Long running requests: #{@long_running_requests.size})"
|
|
164
164
|
@shutdown = true
|
|
165
|
-
@long_running_requests.values.each { |f| f.terminate(true) }
|
|
165
|
+
@long_running_requests.values.each { |f| f.terminate(graceful: true) }
|
|
166
166
|
end
|
|
167
167
|
|
|
168
168
|
def recv_http_request(msg)
|
data/lib/tipi/http1_adapter.rb
CHANGED
|
@@ -27,13 +27,8 @@ module Tipi
|
|
|
27
27
|
# upgraded
|
|
28
28
|
break if handle_request(headers, &block)
|
|
29
29
|
end
|
|
30
|
-
rescue H1P::Error
|
|
31
|
-
#
|
|
32
|
-
# string is given as the HTTP method (String#upcase will raise on invalid HTTP string)
|
|
33
|
-
#
|
|
34
|
-
# ignore
|
|
35
|
-
rescue SystemCallError, IOError
|
|
36
|
-
# ignore
|
|
30
|
+
rescue SystemCallError, IOError, H1P::Error
|
|
31
|
+
# connection or parser error, ignore
|
|
37
32
|
ensure
|
|
38
33
|
finalize_client_loop
|
|
39
34
|
end
|
|
@@ -160,7 +155,7 @@ module Tipi
|
|
|
160
155
|
# response API
|
|
161
156
|
|
|
162
157
|
CRLF = "\r\n"
|
|
163
|
-
|
|
158
|
+
|
|
164
159
|
# Sends response including headers and body. Waits for the request to complete
|
|
165
160
|
# if not yet completed. The body is sent using chunked transfer encoding.
|
|
166
161
|
# @param request [Qeweney::Request] HTTP request
|
data/lib/tipi/supervisor.rb
CHANGED
data/lib/tipi/version.rb
CHANGED
data/test/helper.rb
CHANGED
data/test/test_http_server.rb
CHANGED
|
@@ -9,10 +9,10 @@ class String
|
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
class HTTP1ServerTest <
|
|
12
|
+
class HTTP1ServerTest < Minitest::Test
|
|
13
13
|
def teardown
|
|
14
14
|
@server&.interrupt if @server&.alive?
|
|
15
|
-
|
|
15
|
+
sleep 0.01
|
|
16
16
|
super
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -67,11 +67,13 @@ class HTTP1ServerTest < MiniTest::Test
|
|
|
67
67
|
|
|
68
68
|
connection << "GET / HTTP/1.0\r\nConnection: keep-alive\r\n\r\n"
|
|
69
69
|
response = connection.readpartial(8192)
|
|
70
|
+
sleep 0.01
|
|
70
71
|
assert !connection.eof?
|
|
71
72
|
assert_equal("HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nHi", response)
|
|
72
73
|
|
|
73
74
|
connection << "GET / HTTP/1.1\r\n\r\n"
|
|
74
75
|
response = connection.readpartial(8192)
|
|
76
|
+
sleep 0.01
|
|
75
77
|
assert !connection.eof?
|
|
76
78
|
expected = <<~HTTP.crlf_lines.chomp
|
|
77
79
|
HTTP/1.1 200 OK
|
|
@@ -83,6 +85,7 @@ class HTTP1ServerTest < MiniTest::Test
|
|
|
83
85
|
|
|
84
86
|
connection << "GET / HTTP/1.0\r\n\r\n"
|
|
85
87
|
response = connection.readpartial(8192)
|
|
88
|
+
sleep 0.01
|
|
86
89
|
assert connection.eof?
|
|
87
90
|
assert_equal("HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nHi", response)
|
|
88
91
|
end
|
|
@@ -191,6 +194,7 @@ class HTTP1ServerTest < MiniTest::Test
|
|
|
191
194
|
|
|
192
195
|
connection << "GET / HTTP/1.1\r\n\r\n"
|
|
193
196
|
response = connection.readpartial(8192)
|
|
197
|
+
sleep 0.01
|
|
194
198
|
assert !connection.eof?
|
|
195
199
|
expected = <<~HTTP.crlf_lines.chomp
|
|
196
200
|
HTTP/1.1 200 OK
|
|
@@ -209,6 +213,7 @@ class HTTP1ServerTest < MiniTest::Test
|
|
|
209
213
|
|
|
210
214
|
snooze
|
|
211
215
|
response = connection.readpartial(8192)
|
|
216
|
+
snooze
|
|
212
217
|
assert !connection.eof?
|
|
213
218
|
expected = <<~HTTP.crlf_lines
|
|
214
219
|
HTTP/1.1 101 Switching Protocols
|
data/test/test_request.rb
CHANGED
data/tipi.gemspec
CHANGED
|
@@ -18,29 +18,35 @@ Gem::Specification.new do |s|
|
|
|
18
18
|
s.rdoc_options = ["--title", "tipi", "--main", "README.md"]
|
|
19
19
|
s.extra_rdoc_files = ["README.md"]
|
|
20
20
|
s.require_paths = ["lib"]
|
|
21
|
-
s.required_ruby_version = '>= 2
|
|
21
|
+
s.required_ruby_version = '>= 3.2'
|
|
22
22
|
|
|
23
23
|
s.executables = ['tipi']
|
|
24
24
|
|
|
25
|
-
s.add_runtime_dependency '
|
|
26
|
-
s.add_runtime_dependency '
|
|
27
|
-
s.add_runtime_dependency 'qeweney', '~>0.18'
|
|
28
|
-
s.add_runtime_dependency 'extralite', '~>1.25'
|
|
29
|
-
s.add_runtime_dependency 'h1p', '~>0.6.1'
|
|
25
|
+
s.add_runtime_dependency 'base64', '~>0.3'
|
|
26
|
+
s.add_runtime_dependency 'mutex_m', '~>0.3'
|
|
30
27
|
|
|
31
|
-
s.add_runtime_dependency '
|
|
32
|
-
s.add_runtime_dependency '
|
|
33
|
-
s.add_runtime_dependency '
|
|
34
|
-
s.add_runtime_dependency '
|
|
35
|
-
s.add_runtime_dependency '
|
|
28
|
+
s.add_runtime_dependency 'polyphony', '~>1.4'
|
|
29
|
+
s.add_runtime_dependency 'ever', '~>0.2'
|
|
30
|
+
s.add_runtime_dependency 'qeweney', '~>0.24'
|
|
31
|
+
s.add_runtime_dependency 'extralite', '~>2.13'
|
|
32
|
+
s.add_runtime_dependency 'h1p', '~>1.1'
|
|
33
|
+
|
|
34
|
+
s.add_runtime_dependency 'http-2', '~>1.1'
|
|
35
|
+
s.add_runtime_dependency 'rack', '>=2.0.8', '<3.3.0'
|
|
36
|
+
s.add_runtime_dependency 'websocket', '~>1.2.11'
|
|
37
|
+
s.add_runtime_dependency 'acme-client', '~>2.0.26'
|
|
38
|
+
s.add_runtime_dependency 'localhost', '~>1.6.0'
|
|
36
39
|
|
|
37
40
|
# for digital fabric
|
|
38
|
-
s.add_runtime_dependency 'msgpack', '~>1.
|
|
41
|
+
s.add_runtime_dependency 'msgpack', '~>1.8.0'
|
|
42
|
+
|
|
43
|
+
s.add_development_dependency 'logger', '~>1.7'
|
|
44
|
+
s.add_development_dependency 'ostruct', '~>0.3'
|
|
39
45
|
|
|
40
|
-
s.add_development_dependency 'rake', '~>13.0
|
|
41
|
-
s.add_development_dependency 'minitest', '~>5.
|
|
42
|
-
s.add_development_dependency 'simplecov', '~>0.
|
|
43
|
-
s.add_development_dependency 'memory_profiler', '~>1.
|
|
46
|
+
s.add_development_dependency 'rake', '~>13.3.0'
|
|
47
|
+
s.add_development_dependency 'minitest', '~>5.26.0'
|
|
48
|
+
s.add_development_dependency 'simplecov', '~>0.22.0'
|
|
49
|
+
s.add_development_dependency 'memory_profiler', '~>1.1.0'
|
|
44
50
|
|
|
45
|
-
s.add_development_dependency 'cuba', '~>
|
|
51
|
+
s.add_development_dependency 'cuba', '~>4.0.3'
|
|
46
52
|
end
|
metadata
CHANGED
|
@@ -1,99 +1,126 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tipi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.56'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sharon Rosner
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: base64
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0.3'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0.3'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: mutex_m
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0.3'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0.3'
|
|
13
40
|
- !ruby/object:Gem::Dependency
|
|
14
41
|
name: polyphony
|
|
15
42
|
requirement: !ruby/object:Gem::Requirement
|
|
16
43
|
requirements:
|
|
17
44
|
- - "~>"
|
|
18
45
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.
|
|
46
|
+
version: '1.4'
|
|
20
47
|
type: :runtime
|
|
21
48
|
prerelease: false
|
|
22
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
50
|
requirements:
|
|
24
51
|
- - "~>"
|
|
25
52
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 1.
|
|
53
|
+
version: '1.4'
|
|
27
54
|
- !ruby/object:Gem::Dependency
|
|
28
55
|
name: ever
|
|
29
56
|
requirement: !ruby/object:Gem::Requirement
|
|
30
57
|
requirements:
|
|
31
58
|
- - "~>"
|
|
32
59
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0.
|
|
60
|
+
version: '0.2'
|
|
34
61
|
type: :runtime
|
|
35
62
|
prerelease: false
|
|
36
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
64
|
requirements:
|
|
38
65
|
- - "~>"
|
|
39
66
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0.
|
|
67
|
+
version: '0.2'
|
|
41
68
|
- !ruby/object:Gem::Dependency
|
|
42
69
|
name: qeweney
|
|
43
70
|
requirement: !ruby/object:Gem::Requirement
|
|
44
71
|
requirements:
|
|
45
72
|
- - "~>"
|
|
46
73
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0.
|
|
74
|
+
version: '0.24'
|
|
48
75
|
type: :runtime
|
|
49
76
|
prerelease: false
|
|
50
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
78
|
requirements:
|
|
52
79
|
- - "~>"
|
|
53
80
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0.
|
|
81
|
+
version: '0.24'
|
|
55
82
|
- !ruby/object:Gem::Dependency
|
|
56
83
|
name: extralite
|
|
57
84
|
requirement: !ruby/object:Gem::Requirement
|
|
58
85
|
requirements:
|
|
59
86
|
- - "~>"
|
|
60
87
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
88
|
+
version: '2.13'
|
|
62
89
|
type: :runtime
|
|
63
90
|
prerelease: false
|
|
64
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
92
|
requirements:
|
|
66
93
|
- - "~>"
|
|
67
94
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
95
|
+
version: '2.13'
|
|
69
96
|
- !ruby/object:Gem::Dependency
|
|
70
97
|
name: h1p
|
|
71
98
|
requirement: !ruby/object:Gem::Requirement
|
|
72
99
|
requirements:
|
|
73
100
|
- - "~>"
|
|
74
101
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
102
|
+
version: '1.1'
|
|
76
103
|
type: :runtime
|
|
77
104
|
prerelease: false
|
|
78
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
106
|
requirements:
|
|
80
107
|
- - "~>"
|
|
81
108
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
109
|
+
version: '1.1'
|
|
83
110
|
- !ruby/object:Gem::Dependency
|
|
84
111
|
name: http-2
|
|
85
112
|
requirement: !ruby/object:Gem::Requirement
|
|
86
113
|
requirements:
|
|
87
114
|
- - "~>"
|
|
88
115
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
116
|
+
version: '1.1'
|
|
90
117
|
type: :runtime
|
|
91
118
|
prerelease: false
|
|
92
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
120
|
requirements:
|
|
94
121
|
- - "~>"
|
|
95
122
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
123
|
+
version: '1.1'
|
|
97
124
|
- !ruby/object:Gem::Dependency
|
|
98
125
|
name: rack
|
|
99
126
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -103,7 +130,7 @@ dependencies:
|
|
|
103
130
|
version: 2.0.8
|
|
104
131
|
- - "<"
|
|
105
132
|
- !ruby/object:Gem::Version
|
|
106
|
-
version:
|
|
133
|
+
version: 3.3.0
|
|
107
134
|
type: :runtime
|
|
108
135
|
prerelease: false
|
|
109
136
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -113,134 +140,161 @@ dependencies:
|
|
|
113
140
|
version: 2.0.8
|
|
114
141
|
- - "<"
|
|
115
142
|
- !ruby/object:Gem::Version
|
|
116
|
-
version:
|
|
143
|
+
version: 3.3.0
|
|
117
144
|
- !ruby/object:Gem::Dependency
|
|
118
145
|
name: websocket
|
|
119
146
|
requirement: !ruby/object:Gem::Requirement
|
|
120
147
|
requirements:
|
|
121
148
|
- - "~>"
|
|
122
149
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: 1.2.
|
|
150
|
+
version: 1.2.11
|
|
124
151
|
type: :runtime
|
|
125
152
|
prerelease: false
|
|
126
153
|
version_requirements: !ruby/object:Gem::Requirement
|
|
127
154
|
requirements:
|
|
128
155
|
- - "~>"
|
|
129
156
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: 1.2.
|
|
157
|
+
version: 1.2.11
|
|
131
158
|
- !ruby/object:Gem::Dependency
|
|
132
159
|
name: acme-client
|
|
133
160
|
requirement: !ruby/object:Gem::Requirement
|
|
134
161
|
requirements:
|
|
135
162
|
- - "~>"
|
|
136
163
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: 2.0.
|
|
164
|
+
version: 2.0.26
|
|
138
165
|
type: :runtime
|
|
139
166
|
prerelease: false
|
|
140
167
|
version_requirements: !ruby/object:Gem::Requirement
|
|
141
168
|
requirements:
|
|
142
169
|
- - "~>"
|
|
143
170
|
- !ruby/object:Gem::Version
|
|
144
|
-
version: 2.0.
|
|
171
|
+
version: 2.0.26
|
|
145
172
|
- !ruby/object:Gem::Dependency
|
|
146
173
|
name: localhost
|
|
147
174
|
requirement: !ruby/object:Gem::Requirement
|
|
148
175
|
requirements:
|
|
149
176
|
- - "~>"
|
|
150
177
|
- !ruby/object:Gem::Version
|
|
151
|
-
version: 1.
|
|
178
|
+
version: 1.6.0
|
|
152
179
|
type: :runtime
|
|
153
180
|
prerelease: false
|
|
154
181
|
version_requirements: !ruby/object:Gem::Requirement
|
|
155
182
|
requirements:
|
|
156
183
|
- - "~>"
|
|
157
184
|
- !ruby/object:Gem::Version
|
|
158
|
-
version: 1.
|
|
185
|
+
version: 1.6.0
|
|
159
186
|
- !ruby/object:Gem::Dependency
|
|
160
187
|
name: msgpack
|
|
161
188
|
requirement: !ruby/object:Gem::Requirement
|
|
162
189
|
requirements:
|
|
163
190
|
- - "~>"
|
|
164
191
|
- !ruby/object:Gem::Version
|
|
165
|
-
version: 1.
|
|
192
|
+
version: 1.8.0
|
|
166
193
|
type: :runtime
|
|
167
194
|
prerelease: false
|
|
168
195
|
version_requirements: !ruby/object:Gem::Requirement
|
|
169
196
|
requirements:
|
|
170
197
|
- - "~>"
|
|
171
198
|
- !ruby/object:Gem::Version
|
|
172
|
-
version: 1.
|
|
199
|
+
version: 1.8.0
|
|
200
|
+
- !ruby/object:Gem::Dependency
|
|
201
|
+
name: logger
|
|
202
|
+
requirement: !ruby/object:Gem::Requirement
|
|
203
|
+
requirements:
|
|
204
|
+
- - "~>"
|
|
205
|
+
- !ruby/object:Gem::Version
|
|
206
|
+
version: '1.7'
|
|
207
|
+
type: :development
|
|
208
|
+
prerelease: false
|
|
209
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
210
|
+
requirements:
|
|
211
|
+
- - "~>"
|
|
212
|
+
- !ruby/object:Gem::Version
|
|
213
|
+
version: '1.7'
|
|
214
|
+
- !ruby/object:Gem::Dependency
|
|
215
|
+
name: ostruct
|
|
216
|
+
requirement: !ruby/object:Gem::Requirement
|
|
217
|
+
requirements:
|
|
218
|
+
- - "~>"
|
|
219
|
+
- !ruby/object:Gem::Version
|
|
220
|
+
version: '0.3'
|
|
221
|
+
type: :development
|
|
222
|
+
prerelease: false
|
|
223
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
224
|
+
requirements:
|
|
225
|
+
- - "~>"
|
|
226
|
+
- !ruby/object:Gem::Version
|
|
227
|
+
version: '0.3'
|
|
173
228
|
- !ruby/object:Gem::Dependency
|
|
174
229
|
name: rake
|
|
175
230
|
requirement: !ruby/object:Gem::Requirement
|
|
176
231
|
requirements:
|
|
177
232
|
- - "~>"
|
|
178
233
|
- !ruby/object:Gem::Version
|
|
179
|
-
version: 13.0
|
|
234
|
+
version: 13.3.0
|
|
180
235
|
type: :development
|
|
181
236
|
prerelease: false
|
|
182
237
|
version_requirements: !ruby/object:Gem::Requirement
|
|
183
238
|
requirements:
|
|
184
239
|
- - "~>"
|
|
185
240
|
- !ruby/object:Gem::Version
|
|
186
|
-
version: 13.0
|
|
241
|
+
version: 13.3.0
|
|
187
242
|
- !ruby/object:Gem::Dependency
|
|
188
243
|
name: minitest
|
|
189
244
|
requirement: !ruby/object:Gem::Requirement
|
|
190
245
|
requirements:
|
|
191
246
|
- - "~>"
|
|
192
247
|
- !ruby/object:Gem::Version
|
|
193
|
-
version: 5.
|
|
248
|
+
version: 5.26.0
|
|
194
249
|
type: :development
|
|
195
250
|
prerelease: false
|
|
196
251
|
version_requirements: !ruby/object:Gem::Requirement
|
|
197
252
|
requirements:
|
|
198
253
|
- - "~>"
|
|
199
254
|
- !ruby/object:Gem::Version
|
|
200
|
-
version: 5.
|
|
255
|
+
version: 5.26.0
|
|
201
256
|
- !ruby/object:Gem::Dependency
|
|
202
257
|
name: simplecov
|
|
203
258
|
requirement: !ruby/object:Gem::Requirement
|
|
204
259
|
requirements:
|
|
205
260
|
- - "~>"
|
|
206
261
|
- !ruby/object:Gem::Version
|
|
207
|
-
version: 0.
|
|
262
|
+
version: 0.22.0
|
|
208
263
|
type: :development
|
|
209
264
|
prerelease: false
|
|
210
265
|
version_requirements: !ruby/object:Gem::Requirement
|
|
211
266
|
requirements:
|
|
212
267
|
- - "~>"
|
|
213
268
|
- !ruby/object:Gem::Version
|
|
214
|
-
version: 0.
|
|
269
|
+
version: 0.22.0
|
|
215
270
|
- !ruby/object:Gem::Dependency
|
|
216
271
|
name: memory_profiler
|
|
217
272
|
requirement: !ruby/object:Gem::Requirement
|
|
218
273
|
requirements:
|
|
219
274
|
- - "~>"
|
|
220
275
|
- !ruby/object:Gem::Version
|
|
221
|
-
version: 1.
|
|
276
|
+
version: 1.1.0
|
|
222
277
|
type: :development
|
|
223
278
|
prerelease: false
|
|
224
279
|
version_requirements: !ruby/object:Gem::Requirement
|
|
225
280
|
requirements:
|
|
226
281
|
- - "~>"
|
|
227
282
|
- !ruby/object:Gem::Version
|
|
228
|
-
version: 1.
|
|
283
|
+
version: 1.1.0
|
|
229
284
|
- !ruby/object:Gem::Dependency
|
|
230
285
|
name: cuba
|
|
231
286
|
requirement: !ruby/object:Gem::Requirement
|
|
232
287
|
requirements:
|
|
233
288
|
- - "~>"
|
|
234
289
|
- !ruby/object:Gem::Version
|
|
235
|
-
version:
|
|
290
|
+
version: 4.0.3
|
|
236
291
|
type: :development
|
|
237
292
|
prerelease: false
|
|
238
293
|
version_requirements: !ruby/object:Gem::Requirement
|
|
239
294
|
requirements:
|
|
240
295
|
- - "~>"
|
|
241
296
|
- !ruby/object:Gem::Version
|
|
242
|
-
version:
|
|
243
|
-
description:
|
|
297
|
+
version: 4.0.3
|
|
244
298
|
email: sharon@noteflakes.com
|
|
245
299
|
executables:
|
|
246
300
|
- tipi
|
|
@@ -358,7 +412,6 @@ metadata:
|
|
|
358
412
|
documentation_uri: https://www.rubydoc.info/gems/tipi
|
|
359
413
|
homepage_uri: https://github.com/digital-fabric/tipi
|
|
360
414
|
changelog_uri: https://github.com/digital-fabric/tipi/blob/master/CHANGELOG.md
|
|
361
|
-
post_install_message:
|
|
362
415
|
rdoc_options:
|
|
363
416
|
- "--title"
|
|
364
417
|
- tipi
|
|
@@ -370,15 +423,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
370
423
|
requirements:
|
|
371
424
|
- - ">="
|
|
372
425
|
- !ruby/object:Gem::Version
|
|
373
|
-
version: '2
|
|
426
|
+
version: '3.2'
|
|
374
427
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
375
428
|
requirements:
|
|
376
429
|
- - ">="
|
|
377
430
|
- !ruby/object:Gem::Version
|
|
378
431
|
version: '0'
|
|
379
432
|
requirements: []
|
|
380
|
-
rubygems_version: 3.
|
|
381
|
-
signing_key:
|
|
433
|
+
rubygems_version: 3.6.9
|
|
382
434
|
specification_version: 4
|
|
383
435
|
summary: Tipi - the All-in-one Web Server for Ruby Apps
|
|
384
436
|
test_files: []
|