From 9e61153c42d9d238867246b9705a783456f2f397 Mon Sep 17 00:00:00 2001 From: Tomasz Urban Date: Mon, 18 Mar 2024 22:03:35 +0100 Subject: [PATCH] Allow alternative schemes in Binder (#3302 ) --- lib/puma/binder.rb | 7 +++++++ test/test_binder.rb | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lib/puma/binder.rb b/lib/puma/binder.rb index 7c334c22cf..056156f6ab 100644 --- a/lib/puma/binder.rb +++ b/lib/puma/binder.rb @@ -141,7 +141,14 @@ def synthesize_binds_from_activated_fs(binds, only_matching) end end + def before_parse(&block) + @before_parse ||= [] + @before_parse << block if block + @before_parse + end + def parse(binds, log_writer = nil, log_msg = 'Listening') + before_parse.each(&:call) log_writer ||= @log_writer binds.each do |str| uri = URI.parse str diff --git a/test/test_binder.rb b/test/test_binder.rb index 31d3ff860f..985cc6600c 100644 --- a/test/test_binder.rb +++ b/test/test_binder.rb @@ -79,6 +79,20 @@ def test_synthesize_binds_from_activated_fds_complex_binds assert_equal expected, result end + def test_runs_before_parse_hooks + mock = Minitest::Mock.new + proc = -> { mock.call } + + @binder.before_parse &proc + + mock.expect(:call, nil) + + @binder.parse ["tcp://localhost:0"] + + mock.verify + assert_equal @binder.instance_variable_get(:@before_parse), [proc] + end + def test_localhost_addresses_dont_alter_listeners_for_tcp_addresses @binder.parse ["tcp://localhost:0"], @log_writer