From 350d75d562ff68e79308c2e36c4981f4e74394ce Mon Sep 17 00:00:00 2001 From: Josh Goodall Date: Sat, 5 Sep 2026 17:58:56 +1000 Subject: [PATCH] add class-level body predicates to Net::HTTPRequest --- lib/net/http/request.rb | 18 ++++++++++++++++++ sig/net-http.rbs | 22 ++++++++++++++++++++++ test/net/http/test_http_request.rb | 10 ++++++++++ test_sig/test_net_http.rb | 17 +++++++++++++++++ 4 files changed, 67 insertions(+) diff --git a/lib/net/http/request.rb b/lib/net/http/request.rb index db7641a7..8114fa46 100644 --- a/lib/net/http/request.rb +++ b/lib/net/http/request.rb @@ -86,4 +86,22 @@ def initialize(path, initheader = nil) self.class::RESPONSE_HAS_BODY, path, initheader end + + # Returns whether the request may have a body: + # + # Net::HTTP::Post.request_body_permitted? # => true + # Net::HTTP::Get.request_body_permitted? # => false + # + def self.request_body_permitted? + self::REQUEST_HAS_BODY + end + + # Returns whether the response may have a body: + # + # Net::HTTP::Post.response_body_permitted? # => true + # Net::HTTP::Head.response_body_permitted? # => false + # + def self.response_body_permitted? + self::RESPONSE_HAS_BODY + end end diff --git a/sig/net-http.rbs b/sig/net-http.rbs index cc19054d..97f5145d 100644 --- a/sig/net-http.rbs +++ b/sig/net-http.rbs @@ -3312,6 +3312,28 @@ module Net # def initialize: (String path, ?headers initheader) -> void | (URI::Generic uri, ?headers initheader) -> void + + # + # Returns whether the request may have a body: + # + # Net::HTTP::Post.request_body_permitted? # => true + # Net::HTTP::Get.request_body_permitted? # => false + # + def self.request_body_permitted?: () -> bool + + # + # Returns whether the response may have a body: + # + # Net::HTTP::Post.response_body_permitted? # => true + # Net::HTTP::Head.response_body_permitted? # => false + # + def self.response_body_permitted?: () -> bool end # diff --git a/test/net/http/test_http_request.rb b/test/net/http/test_http_request.rb index 9f5cf4f8..cc4fee77 100644 --- a/test/net/http/test_http_request.rb +++ b/test/net/http/test_http_request.rb @@ -122,4 +122,14 @@ def test_update_uri assert_equal "[2001:db8::1]", req.uri.host assert_equal 8080, req.uri.port end + + def test_request_body_permitted? + assert_predicate Net::HTTP::Post, :request_body_permitted? + assert_not_predicate Net::HTTP::Get, :request_body_permitted? + end + + def test_response_body_permitted? + assert_predicate Net::HTTP::Post, :response_body_permitted? + assert_not_predicate Net::HTTP::Head, :response_body_permitted? + end end diff --git a/test_sig/test_net_http.rb b/test_sig/test_net_http.rb index 2038e34f..02abefc9 100644 --- a/test_sig/test_net_http.rb +++ b/test_sig/test_net_http.rb @@ -550,6 +550,23 @@ def test_iteration_on_headers end end +class TestSingletonNetHTTPRequest < Test::Unit::TestCase + include RBS::UnitTest::TypeAssertions + + library "net-http" + testing "singleton(::Net::HTTPRequest)" + + def test_request_body_permitted? + assert_send_type "() -> bool", + Net::HTTP::Post, :request_body_permitted? + end + + def test_response_body_permitted? + assert_send_type "() -> bool", + Net::HTTP::Post, :response_body_permitted? + end +end + class TestSingletonNetHTTPResponse < Test::Unit::TestCase include RBS::UnitTest::TypeAssertions