From 6bf73cfccf4f3b0b17fa8926b47ee26710527ea0 Mon Sep 17 00:00:00 2001 From: Mike Mackintosh Date: Sun, 22 Mar 2015 23:53:32 -0400 Subject: [PATCH] added #to range and fixed #40 --- lib/ipaddress/ipv4.rb | 22 +++++++++++++++++++++- test/ipaddress/ipv4_test.rb | 13 +++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/ipaddress/ipv4.rb b/lib/ipaddress/ipv4.rb index fc2976a..eea73ac 100644 --- a/lib/ipaddress/ipv4.rb +++ b/lib/ipaddress/ipv4.rb @@ -640,6 +640,26 @@ def reverse end alias_method :arpa, :reverse + # + # Return a list of IP's between @address + # and the supplied IP + # + # ip = IPAddress("172.16.100.51/32") + # + # ip.to("172.16.100.100") + # #=> ["172.16.100.51", + # "172.16.100.52", + # ... + # "172.16.100.99", + # "172.16.100.100"] + # + def to(e) + unless e.is_a? IPAddress::IPv4 + e = IPv4.new(e) + end + + Range.new(@u32, e.to_u32).map{|i| IPAddress.ntoa(i) } + end # # Splits a network into different subnets # @@ -1028,7 +1048,7 @@ def self.parse_classful(ip) # Tweaked to remove the #upto(32) def newprefix(num) - return @prefix + (Math::log2(num).to_i) + return @prefix + (Math::log2(num).ceil ) end def sum_first_found(arr) diff --git a/test/ipaddress/ipv4_test.rb b/test/ipaddress/ipv4_test.rb index e0b37b8..4680898 100644 --- a/test/ipaddress/ipv4_test.rb +++ b/test/ipaddress/ipv4_test.rb @@ -64,6 +64,11 @@ def setup "10.1.1.1" => 8, "150.1.1.1" => 16, "200.1.1.1" => 24 } + + @in_range = { + "10.32.0.1" => ["10.32.0.253", 253], + "192.0.0.0" => ["192.1.255.255", 131072] + } end @@ -551,6 +556,14 @@ def test_network_split assert_equal x.split(256).length, 256 end end + + def test_in_range + @in_range.each do |s,d| + ip = @klass.new(s) + assert_equal ip.to(d[0]).length, d[1] + end + end + end # class IPv4Test