From c3dac4390ed021962d0b3e41b536aed955423d48 Mon Sep 17 00:00:00 2001 From: Sam James Date: Sat, 1 Apr 2023 21:26:34 +0100 Subject: dev-ruby/websocket: enable ruby32, fix tests - Enable ruby32 - Fix tests Fixing tests was interesting. I very quickly found the upstream commits touching the port deduction/specification bit, but I had no idea why this would've started failing on all Rubies all of a sudden yet. But ended up, after looking through MRI Ruby release notes, figured out it must be somewhere else (it didn't seem to be a backported bundled gem update). It looks like it's actually because of a change in an (undeclared) test dep - dev-ruby/webrick. It was probably https://github.com/ruby/webrick/pull/55 or similar, but enough to satisfy my curiosity anyway. Signed-off-by: Sam James --- .../files/websocket-1.2.9-default-port.patch | 134 +++++++++++++++++++++ dev-ruby/websocket/websocket-1.2.9-r2.ebuild | 29 +++++ 2 files changed, 163 insertions(+) create mode 100644 dev-ruby/websocket/files/websocket-1.2.9-default-port.patch create mode 100644 dev-ruby/websocket/websocket-1.2.9-r2.ebuild diff --git a/dev-ruby/websocket/files/websocket-1.2.9-default-port.patch b/dev-ruby/websocket/files/websocket-1.2.9-default-port.patch new file mode 100644 index 000000000000..5830036da62e --- /dev/null +++ b/dev-ruby/websocket/files/websocket-1.2.9-default-port.patch @@ -0,0 +1,134 @@ +https://github.com/imanel/websocket-ruby/commit/736a7515aff808a5c268b87066e928b59aed769e + +From 736a7515aff808a5c268b87066e928b59aed769e Mon Sep 17 00:00:00 2001 +From: Bernard Potocki +Date: Thu, 17 Feb 2022 20:02:21 +0100 +Subject: [PATCH] Ensure correct port is always specified (#48) + +--- a/lib/websocket/handshake/base.rb ++++ b/lib/websocket/handshake/base.rb +@@ -7,7 +7,7 @@ class Base + include ExceptionHandler + include NiceInspect + +- attr_reader :host, :port, :path, :query, ++ attr_reader :host, :path, :query, + :state, :version, :secure, + :headers, :protocols + +@@ -66,6 +66,20 @@ def leftovers + (@leftovers.to_s.split("\n", reserved_leftover_lines + 1)[reserved_leftover_lines] || '').strip + end + ++ # Return default port for protocol (80 for ws, 443 for wss) ++ def default_port ++ secure ? 443 : 80 ++ end ++ ++ # Check if provided port is a default one ++ def default_port? ++ port == default_port ++ end ++ ++ def port ++ @port || default_port ++ end ++ + # URI of request. + # @return [String] Full URI with protocol + # @example +@@ -73,7 +87,7 @@ def leftovers + def uri + uri = String.new(secure ? 'wss://' : 'ws://') + uri << host +- uri << ":#{port}" if port ++ uri << ":#{port}" unless default_port? + uri << path + uri << "?#{query}" if query + uri +--- a/lib/websocket/handshake/client.rb ++++ b/lib/websocket/handshake/client.rb +@@ -61,7 +61,7 @@ def initialize(args = {}) + uri = URI.parse(@url || @uri) + @secure ||= (uri.scheme == 'wss') + @host ||= uri.host +- @port ||= uri.port ++ @port ||= uri.port || default_port + @path ||= uri.path + @query ||= uri.query + end +--- a/lib/websocket/handshake/handler/client04.rb ++++ b/lib/websocket/handshake/handler/client04.rb +@@ -21,7 +21,7 @@ def handshake_keys + %w[Connection Upgrade] + ] + host = @handshake.host +- host += ":#{@handshake.port}" if @handshake.port ++ host += ":#{@handshake.port}" unless @handshake.default_port? + keys << ['Host', host] + keys += super + keys << ['Sec-WebSocket-Origin', @handshake.origin] if @handshake.origin +--- a/lib/websocket/handshake/handler/client75.rb ++++ b/lib/websocket/handshake/handler/client75.rb +@@ -18,7 +18,7 @@ def handshake_keys + %w[Connection Upgrade] + ] + host = @handshake.host +- host += ":#{@handshake.port}" if @handshake.port ++ host += ":#{@handshake.port}" unless @handshake.default_port? + keys << ['Host', host] + keys << ['Origin', @handshake.origin] if @handshake.origin + keys << ['WebSocket-Protocol', @handshake.protocols.first] if @handshake.protocols.any? +--- a/lib/websocket/handshake/server.rb ++++ b/lib/websocket/handshake/server.rb +@@ -129,13 +129,13 @@ def should_respond? + # Host of server according to client header + # @return [String] host + def host +- @headers['host'].to_s.split(':')[0].to_s ++ @host || @headers['host'].to_s.split(':')[0].to_s + end + + # Port of server according to client header +- # @return [String] port ++ # @return [Integer] port + def port +- @headers['host'].to_s.split(':')[1] ++ (@port || @headers['host'].to_s.split(':')[1] || default_port).to_i + end + + private +--- a/spec/support/all_client_drafts.rb ++++ b/spec/support/all_client_drafts.rb +@@ -38,6 +38,10 @@ def validate_request + expect(handshake.query).to eql('aaa=bbb') + end + ++ it 'returns default port' do ++ expect(handshake.port).to be(80) ++ end ++ + it 'returns valid port' do + @request_params = { port: 123 } + expect(handshake.port).to be(123) +--- a/spec/support/all_server_drafts.rb ++++ b/spec/support/all_server_drafts.rb +@@ -47,11 +47,17 @@ def validate_request + expect(handshake.query).to eql('aaa=bbb') + end + ++ it 'returns default port' do ++ handshake << client_request ++ ++ expect(handshake.port).to be(80) ++ end ++ + it 'returns valid port' do + @request_params = { port: 123 } + handshake << client_request + +- expect(handshake.port).to eql('123') ++ expect(handshake.port).to be(123) + end + + it 'returns valid response' do diff --git a/dev-ruby/websocket/websocket-1.2.9-r2.ebuild b/dev-ruby/websocket/websocket-1.2.9-r2.ebuild new file mode 100644 index 000000000000..9c9d3b6ac7bf --- /dev/null +++ b/dev-ruby/websocket/websocket-1.2.9-r2.ebuild @@ -0,0 +1,29 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +USE_RUBY="ruby27 ruby30 ruby31 ruby32" + +RUBY_FAKEGEM_RECIPE_TEST="rspec3" + +inherit ruby-fakegem + +DESCRIPTION="Universal Ruby library to handle WebSocket protocol" +HOMEPAGE="https://github.com/imanel/websocket-ruby" + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86" +IUSE="" + +ruby_add_bdepend " + test? ( + dev-ruby/rspec-its + dev-ruby/webrick + ) +" + +PATCHES=( + "${FILESDIR}"/${P}-default-port.patch +) -- cgit v1.2.3-65-gdbad