summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Zapletal <lzap+git@redhat.com>2020-10-07 13:23:00 +0200
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2021-04-22 14:54:28 +0900
commitc46a4b8c7f434110c30c9587e02387283076579f (patch)
tree199455a0beb1a153a8bea9e1bf4f3081b192d51a
parent6e06c980dace26ff2f06eb4ac1e2d06291101ee7 (diff)
[ruby/uri] Optimize URI#hostname and URI#hostname=
https://github.com/ruby/uri/commit/3b7ccfd835
-rw-r--r--lib/uri/generic.rb4
-rw-r--r--test/uri/test_generic.rb4
2 files changed, 6 insertions, 2 deletions
diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb
index 7de62b66db..cfa0de6b74 100644
--- a/lib/uri/generic.rb
+++ b/lib/uri/generic.rb
@@ -643,7 +643,7 @@ module URI
#
def hostname
v = self.host
- /\A\[(.*)\]\z/ =~ v ? $1 : v
+ v&.start_with?('[') && v.end_with?(']') ? v[1..-2] : v
end
# Sets the host part of the URI as the argument with brackets for IPv6 addresses.
@@ -659,7 +659,7 @@ module URI
# it is wrapped with brackets.
#
def hostname=(v)
- v = "[#{v}]" if /\A\[.*\]\z/ !~ v && /:/ =~ v
+ v = "[#{v}]" if !(v&.start_with?('[') && v&.end_with?(']')) && v&.index(':')
self.host = v
end
diff --git a/test/uri/test_generic.rb b/test/uri/test_generic.rb
index b449a0a0d1..d122587031 100644
--- a/test/uri/test_generic.rb
+++ b/test/uri/test_generic.rb
@@ -799,8 +799,12 @@ class URI::TestGeneric < Test::Unit::TestCase
u = URI("http://foo/bar")
assert_equal("http://foo/bar", u.to_s)
+ u.hostname = "[::1]"
+ assert_equal("http://[::1]/bar", u.to_s)
u.hostname = "::1"
assert_equal("http://[::1]/bar", u.to_s)
+ u.hostname = ""
+ assert_equal("http:///bar", u.to_s)
end
def test_build