diff --git a/lib/uri/rfc2396_parser.rb b/lib/uri/rfc2396_parser.rb index cefd126..ddbf74e 100644 --- a/lib/uri/rfc2396_parser.rb +++ b/lib/uri/rfc2396_parser.rb @@ -320,14 +320,13 @@ def unescape(str, escaped = @regexp[:ESCAPED]) str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) } end - TO_S = Kernel.instance_method(:to_s) # :nodoc: - if TO_S.respond_to?(:bind_call) + if UnboundMethod.method_defined?(:bind_call) def inspect # :nodoc: - TO_S.bind_call(self) + Kernel.instance_method(:to_s).bind_call(self) end else def inspect # :nodoc: - TO_S.bind(self).call + Kernel.instance_method(:to_s).bind(self).call end end diff --git a/lib/uri/rfc3986_parser.rb b/lib/uri/rfc3986_parser.rb index 0b5f0c4..4bd55f3 100644 --- a/lib/uri/rfc3986_parser.rb +++ b/lib/uri/rfc3986_parser.rb @@ -164,14 +164,13 @@ def unescape(str, escaped = nil) # :nodoc: escaped ? RFC2396_PARSER.unescape(str, escaped) : RFC2396_PARSER.unescape(str) end - @@to_s = Kernel.instance_method(:to_s) - if @@to_s.respond_to?(:bind_call) + if UnboundMethod.method_defined?(:bind_call) def inspect - @@to_s.bind_call(self) + Kernel.instance_method(:to_s).bind_call(self) end else def inspect - @@to_s.bind(self).call + Kernel.instance_method(:to_s).bind(self).call end end diff --git a/test/uri/test_parser.rb b/test/uri/test_parser.rb index c14824f..0917beb 100644 --- a/test/uri/test_parser.rb +++ b/test/uri/test_parser.rb @@ -12,6 +12,16 @@ def test_inspect assert_match(/URI::RFC3986_Parser/, URI::Parser.new.inspect) end + def test_inspect_in_ractor + return unless defined?(Ractor) + assert_ractor(<<~RUBY, require: 'uri') + r = Ractor.new { [URI::RFC3986_PARSER.inspect, URI::RFC2396_PARSER.inspect] } + rfc3986, rfc2396 = r.value + assert_match(/URI::RFC3986_Parser/, rfc3986) + assert_match(/URI::RFC2396_Parser/, rfc2396) + RUBY + end + def test_compare url = 'http://a/b/c/d;p?q' u0 = URI.parse(url)