ip_address 0.1 → 0.1.2
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.tar.gz.sig +0 -0
- data/lib/ip_address.rb +63 -21
- metadata +57 -55
- metadata.gz.sig +1 -1
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/ip_address.rb
CHANGED
@@ -8,12 +8,51 @@ end
|
|
8
8
|
|
9
9
|
# This class represents an IP address.
|
10
10
|
class IPAddress
|
11
|
-
|
12
|
-
|
11
|
+
class << self
|
12
|
+
# Is _addr_ an IP address?
|
13
|
+
def is_an_ip?(addr)
|
14
|
+
%w{
|
15
|
+
is_an_ip_instance? is_a_string_ip? is_an_array_ip?
|
16
|
+
is_an_integer_ip?
|
17
|
+
}.each do |m|
|
18
|
+
return true if send(m, addr)
|
19
|
+
end
|
20
|
+
|
21
|
+
false
|
22
|
+
end
|
23
|
+
|
24
|
+
def is_an_ip_instance?(addr)
|
25
|
+
addr.is_a?(IPAddress)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Is _addr_ a string representation of an IP (without a netmask)?
|
29
|
+
def is_a_string_ip?(addr)
|
30
|
+
addr, mask = /^(\d+(?:\.\d+){3})(?:\/(\d+))?$/.match(addr).captures
|
31
|
+
|
32
|
+
# nil.to_i is 0.
|
33
|
+
return false unless (0..32) === mask.to_i
|
34
|
+
|
35
|
+
is_an_array_ip?( addr.split(".").map{|x| x.to_i} )
|
36
|
+
end
|
13
37
|
|
14
|
-
|
15
|
-
|
16
|
-
|
38
|
+
# Is this an array representation of an IP?
|
39
|
+
def is_an_array_ip?(addr)
|
40
|
+
addr.length == 4 and addr.all?{|a| (0..255).include?(a)}
|
41
|
+
end
|
42
|
+
|
43
|
+
# Is _addr_ and integer representation of an IP?
|
44
|
+
def is_an_integer_ip?(addr)
|
45
|
+
addr.integer? and (0 ... 256**4).include?(addr)
|
46
|
+
end
|
47
|
+
|
48
|
+
%w{
|
49
|
+
is_an_ip_instance? is_a_string_ip? is_an_array_ip? is_an_integer_ip?
|
50
|
+
}.each do |meth_name|
|
51
|
+
_m = instance_method(meth_name)
|
52
|
+
define_method(meth_name){ |*a,&b|
|
53
|
+
_m.bind(self).(*a, &b) rescue false
|
54
|
+
}
|
55
|
+
end
|
17
56
|
end
|
18
57
|
|
19
58
|
# our netmask
|
@@ -58,9 +97,9 @@ class IPAddress
|
|
58
97
|
# ip[3] = 8
|
59
98
|
# ip #=> #<IPAddress: 12.4.97.8>
|
60
99
|
def []=(index, val)
|
61
|
-
if
|
100
|
+
if !((0..3) === index)
|
62
101
|
raise ArgumentError, "there are four parts to an IP address"
|
63
|
-
elsif
|
102
|
+
elsif !((0..256) === val)
|
64
103
|
raise ArgumentError, "each of the IP parts is between 0 and 256"
|
65
104
|
end
|
66
105
|
|
@@ -97,6 +136,7 @@ class IPAddress
|
|
97
136
|
end
|
98
137
|
|
99
138
|
def ==(ip)
|
139
|
+
return false unless self.class.is_an_ip?(ip)
|
100
140
|
ip = self.class.new(ip) unless ip.is_a? self.class
|
101
141
|
|
102
142
|
ip.to_i == to_i and ip.netmask == @netmask
|
@@ -116,25 +156,27 @@ class IPAddress
|
|
116
156
|
# Fixnum (also described there) and a netmask.
|
117
157
|
# @return [Fixnum, Fixnum] something like [201613576, 32]
|
118
158
|
def any_to_int_and_netmask(ip)
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
159
|
+
if self.class.is_a_string_ip?(ip)
|
160
|
+
if ip =~ /^(.+)\/(.+)$/
|
161
|
+
ip, mask = $1, $2.to_i
|
162
|
+
else
|
163
|
+
mask = 32
|
164
|
+
end
|
124
165
|
|
125
|
-
|
166
|
+
quads = ip.split('.').map{|q| q.to_i}
|
167
|
+
return [array_to_int(quads), mask]
|
126
168
|
|
127
|
-
|
128
|
-
|
169
|
+
elsif self.class.is_an_array_ip?(ip)
|
170
|
+
return array_to_int(ip), 32
|
129
171
|
|
130
|
-
|
131
|
-
|
172
|
+
elsif self.class.is_an_integer_ip?(ip)
|
173
|
+
return ip, 32
|
132
174
|
|
133
|
-
|
134
|
-
|
175
|
+
elsif self.class.is_an_ip_instance?(ip)
|
176
|
+
return ip.to_i, ip.netmask
|
135
177
|
|
136
|
-
|
137
|
-
|
178
|
+
else
|
179
|
+
raise NotAnIPError.new(ip)
|
138
180
|
end
|
139
181
|
end
|
140
182
|
|
metadata
CHANGED
@@ -1,87 +1,89 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ip_address
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
version: "0.1"
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- katmagic
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
|
-
cert_chain:
|
16
|
-
-
|
17
|
-
|
11
|
+
cert_chain:
|
12
|
+
- ! '-----BEGIN CERTIFICATE-----
|
13
|
+
|
18
14
|
MIIDQDCCAiigAwIBAgIBADANBgkqhkiG9w0BAQUFADBGMRgwFgYDVQQDDA90aGUu
|
15
|
+
|
19
16
|
bWFnaWNhbC5rYXQxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
|
20
|
-
|
17
|
+
|
18
|
+
ARkWA2NvbTAeFw0xMTAyMTUwNDU0MDZaFw0xMjAyMTUwNDU0MDZaMEYxGDAWBgNV
|
19
|
+
|
21
20
|
BAMMD3RoZS5tYWdpY2FsLmthdDEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYK
|
21
|
+
|
22
22
|
CZImiZPyLGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
23
|
+
|
24
|
+
lOa4PmKeI2SoGx2fvQUQTHF8RpOw52yZgkeB/ZOLHhPGpkxN9zn0sBVRCh+8YsOh
|
25
|
+
|
26
|
+
4GGtY9kS5Z4pkMQhhJkdfqBhWxI/Dk3wkEd+GI0cyQ3cXc/INw/CmiFxvBiKEjoN
|
27
|
+
|
28
|
+
zeLesxMeHoOJmwpdF52VdIVwRanZQpL/9buTw+sJykXp/uSYV30M6A/KaiPdnAaN
|
29
|
+
|
30
|
+
+oautPQYWV3sf27vcOVWWG1gvyS8Ardcd8Nx9lSRf8w9WolMXG8qgCY+OGZQm8WK
|
31
|
+
|
32
|
+
WrJ8G6CEHABpd3123gY0Qx1mpPfgaCCi3nfCaSDIabcGFRvIUMiG6m950xcOOt9G
|
33
|
+
|
34
|
+
X0WDpSHYldyBVr3p+Nz4wQIDAQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
|
35
|
+
|
36
|
+
sDAdBgNVHQ4EFgQUTkdCjc2gkF28POXx+iuTDgmaR20wDQYJKoZIhvcNAQEFBQAD
|
37
|
+
|
38
|
+
ggEBAHV/0Mp6m577vyZMxXGdBUcXHAxtd8n4FexczZlZm5NUXwGGVFAeFAG9jY0U
|
39
|
+
|
40
|
+
A/uWI3gIGoE1GOh+iDKnq56epx+wMcWIsLyu7qSbVBgEGmlbYZ9A8LUkk8FQ+CK1
|
41
|
+
|
42
|
+
v5dQUsPRBBYHR/GmQQekkAKumU2n0m1tYLOdKcsi0f3Rjx5XcpUtvgDd4RHiVLcx
|
43
|
+
|
44
|
+
ezvazGDhHTO5Jx5qF3wQ9yJqEoqb+G+tTOBi/OnKOhLKghp7diil8dwBx8jaVw2+
|
45
|
+
|
46
|
+
vfPcHDqz0OtHW/g2q3Y849LoINY8X27EvP0AaCrkrSUhX6736VvUh0gAPBdBQQfj
|
47
|
+
|
48
|
+
Rx1K02ODN+9Ezaa/+0cgt+bNFLM=
|
49
|
+
|
36
50
|
-----END CERTIFICATE-----
|
37
51
|
|
38
|
-
|
52
|
+
'
|
53
|
+
date: 2011-02-14 00:00:00.000000000 -05:00
|
39
54
|
default_executable:
|
40
55
|
dependencies: []
|
41
|
-
|
42
56
|
description: Easily manipulate IPv4 addresses.
|
43
57
|
email: the.magical.kat@gmail.com
|
44
58
|
executables: []
|
45
|
-
|
46
59
|
extensions: []
|
47
|
-
|
48
60
|
extra_rdoc_files: []
|
49
|
-
|
50
|
-
files:
|
61
|
+
files:
|
51
62
|
- lib/ip_address.rb
|
52
63
|
has_rdoc: true
|
53
|
-
homepage: https://github.com/katmagic/
|
54
|
-
licenses:
|
64
|
+
homepage: https://github.com/katmagic/IPAddress
|
65
|
+
licenses:
|
55
66
|
- Unlicense (http://unlicense.org)
|
56
67
|
post_install_message:
|
57
68
|
rdoc_options: []
|
58
|
-
|
59
|
-
require_paths:
|
69
|
+
require_paths:
|
60
70
|
- lib
|
61
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
72
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
|
67
|
-
|
68
|
-
- 0
|
69
|
-
version: "0"
|
70
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
78
|
none: false
|
72
|
-
requirements:
|
73
|
-
- -
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
|
76
|
-
segments:
|
77
|
-
- 0
|
78
|
-
version: "0"
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
79
83
|
requirements: []
|
80
|
-
|
81
84
|
rubyforge_project: ip_address
|
82
|
-
rubygems_version: 1.
|
85
|
+
rubygems_version: 1.5.2
|
83
86
|
signing_key:
|
84
87
|
specification_version: 3
|
85
88
|
summary: Work with IP addresses.
|
86
89
|
test_files: []
|
87
|
-
|
metadata.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Z
|
1
|
+
&7[�y��^q��P�9��/hp�a��.b��!d9X���ߢ7q��;Z>�ij1� a�������m�/"NIB`���`G{ohOs�{3��<�E�n��s����S'��g�u*w�S�;�e��]a���C��.ŋ+�Id�nkW���De^�������;�rr%����&�����[�Z�-����Z%�m��R�߽F�g&f�h�_����e.�X���]���w6�:j>V�������ԡi�����C$*ն
|