[ruby/ipaddr] Added to_json/as_json method

Updated to use cidr method when return address with prefix in #as_json

https://github.com/ruby/ipaddr/commit/cf8181d53e
This commit is contained in:
Taketo Takashima 2023-11-16 17:53:32 +09:00 committed by git
parent 6b1268c7bf
commit eb8cf1d60e
2 changed files with 30 additions and 0 deletions

View File

@ -227,6 +227,22 @@ class IPAddr
return str
end
# Returns a string containing the IP address representation with prefix.
def as_json(*)
if ipv4? && prefix == 32
to_s
elsif ipv6? && prefix == 128
to_s
else
cidr
end
end
# Returns a json string containing the IP address representation.
def to_json(*)
format("\"%s\"", as_json)
end
# Returns a string containing the IP address representation in
# cidr notation
def cidr

View File

@ -260,6 +260,20 @@ class TC_IPAddr < Test::Unit::TestCase
assert_equal("3ffe:505:2::1", IPAddr.new("3ffe:505:2::1").to_s)
end
def test_as_json
assert_equal("192.168.1.2", IPAddr.new("192.168.1.2").as_json)
assert_equal("192.168.1.0/24", IPAddr.new("192.168.1.2/24").as_json)
assert_equal("2001:200:300::1", IPAddr.new("2001:200:300::1").as_json)
assert_equal("2001:200:300::/48", IPAddr.new("2001:200:300::/48").as_json)
end
def test_to_json
assert_equal("\"192.168.1.2\"", IPAddr.new("192.168.1.2").to_json)
assert_equal("\"192.168.1.0/24\"", IPAddr.new("192.168.1.2/24").to_json)
assert_equal("\"2001:200:300::1\"", IPAddr.new("2001:200:300::1").to_json)
assert_equal("\"2001:200:300::/48\"", IPAddr.new("2001:200:300::/48").to_json)
end
def test_netmask
a = IPAddr.new("192.168.1.2/8")
assert_equal(a.netmask, "255.0.0.0")