From d96acdeafac452ba49673a8bce948f6e1b33c872 Mon Sep 17 00:00:00 2001 From: Neil Lalonde <neillalonde@gmail.com> Date: Wed, 24 Sep 2014 12:05:29 -0400 Subject: [PATCH] FEATURE: screened IP address range can be entered like 192.* instead of 192.*.*.* --- app/models/screened_ip_address.rb | 7 +++++-- spec/models/screened_ip_address_spec.rb | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/models/screened_ip_address.rb b/app/models/screened_ip_address.rb index fdca1ab5560..a4eb6e148f8 100644 --- a/app/models/screened_ip_address.rb +++ b/app/models/screened_ip_address.rb @@ -29,12 +29,15 @@ class ScreenedIpAddress < ActiveRecord::Base if num_wildcards == 0 write_attribute(:ip_address, val) else - v = val.gsub(/\/.*/, '') + v = val.gsub(/\/.*/, '') # strip ranges like "/16" from the end if present if v[v.index('*')..-1] =~ /[^\.\*]/ self.errors.add(:ip_address, :invalid) return end - write_attribute(:ip_address, "#{v.gsub('*', '0')}/#{32 - (num_wildcards * 8)}") + parts = v.split('.') + (4 - parts.size).times { parts << '*' } # support strings like 192.* + v = parts.join('.') + write_attribute(:ip_address, "#{v.gsub('*', '0')}/#{32 - (v.count('*') * 8)}") end # this gets even messier, Ruby 1.9.2 raised a different exception to Ruby 2.0.0 diff --git a/spec/models/screened_ip_address_spec.rb b/spec/models/screened_ip_address_spec.rb index b860419b618..eafa2d6ba76 100644 --- a/spec/models/screened_ip_address_spec.rb +++ b/spec/models/screened_ip_address_spec.rb @@ -76,6 +76,8 @@ describe ScreenedIpAddress do test_good_value("123.12.*.*", "123.12.0.0/16") test_good_value("123.12.1.*", "123.12.1.0/24") test_good_value("123.12.*.*/16", "123.12.0.0/16") + test_good_value("123.12.*", "123.12.0.0/16") + test_good_value("123.*", "123.0.0.0/8") end it "handles bad input" do