require 'ipaddr'
IPAddr.new('FF32:00FF:A12:34FF:FE56:7890::/96', Socket::AF_INET) # See RFC4489
Fails with:
ArgumentError: invalid address
from /Users/jnh/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/ipaddr.rb:477:in `rescue in initialize'
from /Users/jnh/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/ipaddr.rb:474:in `initialize'
from (irb):2:in `new'
from (irb):2
from /Users/jnh/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'
Looking over #valid_v6 it appears that it contains a number of invalid regular expressions (IPv4 compatible IPv6 addressing was deprecated by RFC4291 in 2006 for example). I would suggest that all the regular expressions are removed and the operating systems inet_pton() call is used to validate it instead.
Apologies, you're right. That was a stupid mistake to make :)
However, I'm still getting an invalid address:
ruby-1.9.3-p0 :004 > IPAddr.new('FF32:00FF:A12:34FF:FE56:7890::/96', Socket::AF_INET6)
ArgumentError: invalid address
from /Users/jnh/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/ipaddr.rb:496:in `rescue in initialize'
from /Users/jnh/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/ipaddr.rb:493:in `initialize'
from (irb):4:in `new'
from (irb):4
from /Users/jnh/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'