polyphony 0.96 → 0.97

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2db26acbbe9457dc3b3fcdd1e34d35e5347a2e67a5c126b9ddea672957ca3318
4
- data.tar.gz: ac02e27bd659dafbfe0b68db9b22fc3ca8acb744ff82049dbb2bbea999f7e87e
3
+ metadata.gz: 1a8218fc4160e0772ee3aada1f72ea9d063724ccf9b0aee7dfa6e9e4d69ebfe4
4
+ data.tar.gz: 74aae84e991cd4330ad282553061b29e71a6434ce2dafc9985c62feb3a966a68
5
5
  SHA512:
6
- metadata.gz: e99fb459ea41504df54826634d219f8ef1feea3324fe6c56ab18fc46867728d57f36f4c15a35787e0ba42fe588b10d3e849badfcbee0a720c77bb1d8619e8fc3
7
- data.tar.gz: d52ee81b1f1f5a5294cecf09837ccce8cc68f0233d73a0d868326f0a144897542f5ad3e05cc398eb4bf963742fe1fac01a096abf0d77e3201d8c50ca8880e65a
6
+ metadata.gz: 772d0be4ef2f723fa27cc5ecb8ef9e9b5d012c501a364ab23dce7d145fc6d156d5e219e52e871a2aadb41a397c5fb044c8aaee9b42906f4894ff3447af0e93ba
7
+ data.tar.gz: b74d6958ea8a77ffee45aed8184091b5ef54cb4fcaca9798351533b13d2f2202f28ab95f56a26e09692bf40f00e723d2df9c99007dbe10631d1c69c523fb3a58
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.97 2023-02-28
2
+
3
+ - Fix working with IRB (#5)
4
+
1
5
  ## 0.96 2023-02-11
2
6
  - Rework Redis client adapter
3
7
  - Fix working with Pry (#95, thanks @floriandejonckheere)
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ task :recompile => [:clean, :compile]
12
12
  task :default => [:compile, :test]
13
13
 
14
14
  task :test do
15
- exec 'ruby test/run.rb --verbose'
15
+ exec 'ruby test/run.rb'
16
16
  end
17
17
 
18
18
  task :stress_test do
@@ -18,7 +18,8 @@ puts 'Serving HTTPS on port 1234'
18
18
  spin_loop(interval: 1) { STDOUT << '.' }
19
19
 
20
20
  # server.accept_loop do |socket|
21
- while (socket = server.accept)
21
+ server.accept_loop do |socket|
22
+ # while (socket = (server.accept)
22
23
  spin do
23
24
  while (data = socket.gets("\n", 8192))
24
25
  if data.chomp.empty?
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'polyphony'
5
+ require 'localhost/authority'
6
+
7
+ authority = Localhost::Authority.fetch
8
+ server_ctx = authority.server_context
9
+ server_ctx.servername_cb = proc { |_socket, name| server_ctx }
10
+ opts = {
11
+ reuse_addr: true,
12
+ dont_linger: true,
13
+ secure_context: server_ctx
14
+ }
15
+
16
+ server = Polyphony::Net.tcp_listen('localhost', 1234, opts)
17
+
18
+ puts 'Serving HTTPS on port 1234'
19
+
20
+ # server.accept_loop do |socket|
21
+ server.accept_loop do |socket|
22
+ # while (socket = (server.accept)
23
+ spin do
24
+ while (data = socket.gets("\n", 8192))
25
+ if data.chomp.empty?
26
+ socket << "HTTP/1.1 200 OK\nConnection: close\nContent-Length: 4\n\nfoo\n"
27
+ break
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'polyphony'
5
+ require 'localhost/authority'
6
+
7
+ authority = Localhost::Authority.fetch
8
+ server_ctx = authority.server_context
9
+
10
+ resolver = spin_loop do
11
+ name, client = receive
12
+ client << server_ctx
13
+ end
14
+
15
+ server_ctx.servername_cb = proc do |_socket, name|
16
+ resolver << [name, Fiber.current]
17
+ receive
18
+ end
19
+
20
+ opts = {
21
+ reuse_addr: true,
22
+ dont_linger: true,
23
+ secure_context: server_ctx
24
+ }
25
+
26
+ server = Polyphony::Net.tcp_listen('localhost', 1234, opts)
27
+
28
+ puts 'Serving HTTPS on port 1234'
29
+
30
+ # server.accept_loop do |socket|
31
+ server.accept_loop do |socket|
32
+ # while (socket = (server.accept)
33
+ spin do
34
+ while (data = socket.gets("\n", 8192))
35
+ if data.chomp.empty?
36
+ socket << "HTTP/1.1 200 OK\nConnection: close\nContent-Length: 4\n\nfoo\n"
37
+ break
38
+ end
39
+ end
40
+ end
41
+ end
@@ -3,6 +3,7 @@
3
3
  require 'bundler/inline'
4
4
 
5
5
  gemfile do
6
+ source 'https://rubygems.org'
6
7
  gem 'h1p'
7
8
  gem 'polyphony', path: '.'
8
9
  end
@@ -22,10 +23,12 @@ def handle_client(conn)
22
23
 
23
24
  conn << "HTTP/1.1 200 OK\r\nContent-Length: 14\r\n\r\nHello, world!\n"
24
25
  end
26
+ rescue Errno::ECONNRESET
27
+ # ignore
25
28
  rescue H1P::Error
26
29
  puts 'Got invalid request, closing connection...'
27
30
  ensure
28
- conn.close
31
+ conn.close rescue nil
29
32
  end
30
33
  end
31
34
 
@@ -2,46 +2,6 @@
2
2
 
3
3
  require 'polyphony'
4
4
 
5
- if Object.constants.include?(:Reline)
6
- puts "reline"
7
- class Reline::ANSI
8
- def self.select(read_ios = [], write_ios = [], error_ios = [], timeout = nil)
9
- # p [:select, read_ios, timeout]
10
- # puts caller.join("\n")
11
- raise if read_ios.size > 1
12
- raise if write_ios.size > 0
13
- raise if error_ios.size > 0
14
-
15
- # p 1
16
- fiber = Fiber.current
17
- timer = spin do
18
- sleep timeout
19
- fiber.cancel
20
- end
21
- # p 2
22
- read_ios.each do |io|
23
- # p wait: io
24
- Polyphony.backend_wait_io(io, false)
25
- # p :done_wait
26
- return [io]
27
- end
28
- # p 3
29
- rescue Polyphony::Cancel
30
- # p :cancel
31
- return nil
32
- ensure
33
- # p :ensure
34
- timer.stop
35
- # p :ensure_done
36
- end
37
- end
38
- else
39
- require_relative './readline'
40
-
41
- # RubyLex patches
42
- class ::RubyLex
43
- class TerminateLineInput2 < RuntimeError
44
- end
45
- const_set(:TerminateLineInput, TerminateLineInput2)
46
- end
5
+ module Kernel
6
+ alias_method :gets, :orig_gets
47
7
  end
@@ -131,6 +131,16 @@ class ::IO
131
131
  nil
132
132
  end
133
133
 
134
+ def ungetc(c)
135
+ c = c.chr if c.is_a?(Integer)
136
+ if @read_buffer
137
+ @read_buffer.prepend(c)
138
+ else
139
+ @read_buffer = +c
140
+ end
141
+ end
142
+ alias_method :ungetbyte, :ungetc
143
+
134
144
  alias_method :orig_read, :read
135
145
  def read(len = nil, buf = nil, buf_pos = 0)
136
146
  if buf
@@ -252,6 +262,8 @@ class ::IO
252
262
  end
253
263
 
254
264
  def wait_readable(timeout = nil)
265
+ return self if @read_buffer && @read_buffer.size > 0
266
+
255
267
  if timeout
256
268
  move_on_after(timeout) do
257
269
  Polyphony.backend_wait_io(self, false)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Polyphony
4
- VERSION = '0.96'
4
+ VERSION = '0.97'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyphony
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.96'
4
+ version: '0.97'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-11 00:00:00.000000000 Z
11
+ date: 2023-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -250,6 +250,8 @@ files:
250
250
  - examples/io/http1_splice_chunked.rb
251
251
  - examples/io/httparty.rb
252
252
  - examples/io/https_server.rb
253
+ - examples/io/https_server_sni.rb
254
+ - examples/io/https_server_sni_2.rb
253
255
  - examples/io/irb.rb
254
256
  - examples/io/net-http.rb
255
257
  - examples/io/open.rb