From 6bf73cfccf4f3b0b17fa8926b47ee26710527ea0 Mon Sep 17 00:00:00 2001
From: Mike Mackintosh <m@zyp.io>
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 @@ module IPAddress;
     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 @@ module IPAddress;
 
     # 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 @@ class IPv4Test < Minitest::Test
       "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 @@ class IPv4Test < Minitest::Test
       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
 
   
-- 
GitLab