ip 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/ip.rb +64 -0
- metadata +2 -2
data/lib/ip.rb
CHANGED
@@ -25,6 +25,30 @@
|
|
25
25
|
# perhaps a distant, future release. Any patches that can correct this
|
26
26
|
# issue are most welcome.
|
27
27
|
#
|
28
|
+
# ================================================================
|
29
|
+
#
|
30
|
+
# The compilation of software known as ip.rb is distributed under the
|
31
|
+
# following terms:
|
32
|
+
# Copyright (C) 2005-2006 Erik Hollensbe. All rights reserved.
|
33
|
+
#
|
34
|
+
# Redistribution and use in source form, with or without
|
35
|
+
# modification, are permitted provided that the following conditions
|
36
|
+
# are met:
|
37
|
+
# 1. Redistributions of source code must retain the above copyright
|
38
|
+
# notice, this list of conditions and the following disclaimer.
|
39
|
+
#
|
40
|
+
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
41
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
42
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
43
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
|
44
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
45
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
46
|
+
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
47
|
+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
48
|
+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
49
|
+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
50
|
+
# SUCH DAMAGE.
|
51
|
+
#
|
28
52
|
|
29
53
|
class IP
|
30
54
|
|
@@ -158,7 +182,47 @@ class IP
|
|
158
182
|
lower = rawip & rawnm
|
159
183
|
return IP::Range[IP::Address.unpack(lower), IP::Address.unpack(upper)]
|
160
184
|
end
|
185
|
+
|
186
|
+
#
|
187
|
+
# This returns the first ip address of the cidr as an IP::Address object.
|
188
|
+
#
|
189
|
+
def first_ip
|
190
|
+
rawip = IP::Address.pack(@ip)
|
191
|
+
rawnm = 0xFFFFFFFF << (32 - @mask)
|
192
|
+
lower = rawip & rawnm
|
193
|
+
return IP::Address.unpack(lower)
|
194
|
+
end
|
195
|
+
|
196
|
+
#
|
197
|
+
# This returns the last ip address of the cidr as an IP::Address object.
|
198
|
+
#
|
199
|
+
def last_ip
|
200
|
+
rawip = IP::Address.pack(@ip)
|
201
|
+
rawnm = 0xFFFFFFFF << (32 - @mask)
|
202
|
+
upper = rawip | ~rawnm
|
203
|
+
return IP::Address.unpack(upper)
|
204
|
+
end
|
205
|
+
|
206
|
+
#
|
207
|
+
# This will take another IP::CIDR object as an argument and check to see
|
208
|
+
# if it overlaps with this cidr object. Returns true/false on overlap.
|
209
|
+
#
|
210
|
+
# This also throws a TypeError if passed invalid data.
|
211
|
+
#
|
212
|
+
def overlaps?(other_cidr)
|
213
|
+
fail TypeError.new("Expected object of type IP::Address") unless(other_cidr.kind_of?(IP::CIDR))
|
214
|
+
|
215
|
+
myfirst = IP::Address.pack(self.first_ip)
|
216
|
+
mylast = IP::Address.pack(self.last_ip)
|
161
217
|
|
218
|
+
otherfirst = IP::Address.pack(other_cidr.first_ip)
|
219
|
+
otherlast = IP::Address.pack(other_cidr.last_ip)
|
220
|
+
|
221
|
+
return ((myfirst >= otherfirst && myfirst <= otherlast) ||
|
222
|
+
(mylast <= otherlast && mylast >= otherfirst) ||
|
223
|
+
(otherfirst >= myfirst && otherfirst <= mylast)) ? true : false;
|
224
|
+
end
|
225
|
+
|
162
226
|
end
|
163
227
|
|
164
228
|
#
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: ip
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date:
|
6
|
+
version: 0.0.3
|
7
|
+
date: 2006-01-03 00:00:00 -08:00
|
8
8
|
summary: "Ruby classes to work with IP address, ranges, and netmasks"
|
9
9
|
require_paths:
|
10
10
|
- lib
|