ipaddress_2 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.byebug_history +25 -0
- data/.document +5 -0
- data/.gitignore +20 -0
- data/.rock.yml +5 -0
- data/.travis.yml +13 -0
- data/CHANGELOG.md +31 -0
- data/CHANGELOG.rdoc +115 -0
- data/CONTRIBUTING.md +39 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +964 -0
- data/Rakefile +69 -0
- data/VERSION +1 -0
- data/ipaddress_2.gemspec +30 -0
- data/lib/ipaddress_2/ipv4.rb +1204 -0
- data/lib/ipaddress_2/ipv6.rb +1274 -0
- data/lib/ipaddress_2/mongoid.rb +75 -0
- data/lib/ipaddress_2/prefix.rb +285 -0
- data/lib/ipaddress_2/version.rb +3 -0
- data/lib/ipaddress_2.rb +293 -0
- data/test/ipaddress_2/ipv4_test.rb +701 -0
- data/test/ipaddress_2/ipv6_test.rb +707 -0
- data/test/ipaddress_2/mongoid_test.rb +70 -0
- data/test/ipaddress_2/prefix_test.rb +171 -0
- data/test/ipaddress_2_test.rb +109 -0
- data/test/test_helper.rb +37 -0
- metadata +195 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'ipaddress_2/mongoid'
|
3
|
+
|
4
|
+
class MongoidTest < Minitest::Test
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@valid_host4 = "172.16.10.1"
|
8
|
+
@valid_host6 = "2001:0db8:0000:0000:0008:0800:200c:417a"
|
9
|
+
@valid_host6_compressed = IPAddress::IPv6.compress(@valid_host6)
|
10
|
+
@valid_network4 = "#{@valid_host4}/24"
|
11
|
+
@valid_network6 = "#{@valid_host6}/96"
|
12
|
+
@valid_network6_compressed = "#{@valid_host6_compressed}/96"
|
13
|
+
@host4 = IPAddress.parse(@valid_host4)
|
14
|
+
@host6 = IPAddress.parse(@valid_host6)
|
15
|
+
@network4 = IPAddress.parse(@valid_network4)
|
16
|
+
@network6 = IPAddress.parse(@valid_network6)
|
17
|
+
@invalid_values = [nil, "", "invalid"]
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_mongoize
|
21
|
+
# Instance method should be delegated to class method
|
22
|
+
assert_equal @host4.mongoize, IPAddress.mongoize(@host4)
|
23
|
+
assert_equal @network4.mongoize, IPAddress.mongoize(@network4)
|
24
|
+
|
25
|
+
# Hosts addresses should be stored without prefix
|
26
|
+
assert_equal @valid_host4, IPAddress.mongoize(@host4)
|
27
|
+
assert_equal @valid_host6, IPAddress.mongoize(@host6)
|
28
|
+
assert_equal @valid_host4, IPAddress.mongoize("#{@host4}/32")
|
29
|
+
assert_equal @valid_host6, IPAddress.mongoize("#{@host6}/128")
|
30
|
+
|
31
|
+
# Network addresses should be stored with their prefix
|
32
|
+
assert_equal @valid_network4, IPAddress.mongoize(@network4)
|
33
|
+
assert_equal @valid_network6, IPAddress.mongoize(@network6)
|
34
|
+
|
35
|
+
# IPv6 addresses should always be stored uncompressed
|
36
|
+
assert_equal @valid_host6, IPAddress.mongoize(@valid_host6_compressed)
|
37
|
+
assert_equal @valid_network6, IPAddress.mongoize(@valid_network6_compressed)
|
38
|
+
|
39
|
+
@invalid_values.each do |invalid_value|
|
40
|
+
# Invalid addresses should serialize to nil
|
41
|
+
assert_nil IPAddress.mongoize(invalid_value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_demongoize
|
46
|
+
# Valid stored values should be loaded with expected IPAddress type
|
47
|
+
assert_instance_of IPAddress::IPv4, IPAddress.demongoize(@valid_host4)
|
48
|
+
assert_instance_of IPAddress::IPv6, IPAddress.demongoize(@valid_host6)
|
49
|
+
assert_instance_of IPAddress::IPv4, IPAddress.demongoize(@valid_network4)
|
50
|
+
assert_instance_of IPAddress::IPv6, IPAddress.demongoize(@valid_network6)
|
51
|
+
|
52
|
+
# Valid stored values should be loaded as the original IPAddress object
|
53
|
+
assert_equal @host4, IPAddress.demongoize(@valid_host4)
|
54
|
+
assert_equal @host6, IPAddress.demongoize(@valid_host6)
|
55
|
+
assert_equal @network4, IPAddress.demongoize(@valid_network4)
|
56
|
+
assert_equal @network6, IPAddress.demongoize(@valid_network6)
|
57
|
+
|
58
|
+
@invalid_values.each do |invalid_value|
|
59
|
+
# Invalid stored value should be loaded as nil
|
60
|
+
assert_nil IPAddress.demongoize(invalid_value)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_evolve
|
65
|
+
# evolve should delegate to mongoize
|
66
|
+
assert_equal IPAddress.mongoize(@valid_host4), IPAddress.evolve(@valid_host4)
|
67
|
+
assert_equal IPAddress.mongoize(@valid_network4), IPAddress.evolve(@valid_network4)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Prefix32Test < Minitest::Test
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@netmask0 = "0.0.0.0"
|
7
|
+
@netmask8 = "255.0.0.0"
|
8
|
+
@netmask16 = "255.255.0.0"
|
9
|
+
@netmask24 = "255.255.255.0"
|
10
|
+
@netmask30 = "255.255.255.252"
|
11
|
+
@netmasks = [@netmask0,@netmask8,@netmask16,@netmask24,@netmask30]
|
12
|
+
|
13
|
+
@prefix_hash = {
|
14
|
+
"0.0.0.0" => 0,
|
15
|
+
"255.0.0.0" => 8,
|
16
|
+
"255.255.0.0" => 16,
|
17
|
+
"255.255.255.0" => 24,
|
18
|
+
"255.255.255.252" => 30}
|
19
|
+
|
20
|
+
@octets_hash = {
|
21
|
+
[0,0,0,0] => 0,
|
22
|
+
[255,0,0,0] => 8,
|
23
|
+
[255,255,0,0] => 16,
|
24
|
+
[255,255,255,0] => 24,
|
25
|
+
[255,255,255,252] => 30}
|
26
|
+
|
27
|
+
@u32_hash = {
|
28
|
+
0 => 0,
|
29
|
+
8 => 4278190080,
|
30
|
+
16 => 4294901760,
|
31
|
+
24 => 4294967040,
|
32
|
+
30 => 4294967292}
|
33
|
+
|
34
|
+
@klass = IPAddress::Prefix32
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_attributes
|
38
|
+
@prefix_hash.values.each do |num|
|
39
|
+
prefix = @klass.new(num)
|
40
|
+
assert_equal num, prefix.prefix
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_parse_netmask
|
45
|
+
@prefix_hash.each do |netmask, num|
|
46
|
+
prefix = @klass.parse_netmask(netmask)
|
47
|
+
assert_equal num, prefix.prefix
|
48
|
+
assert_instance_of @klass, prefix
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_method_to_ip
|
53
|
+
@prefix_hash.each do |netmask, num|
|
54
|
+
prefix = @klass.new(num)
|
55
|
+
assert_equal netmask, prefix.to_ip
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_method_to_s
|
60
|
+
prefix = @klass.new(8)
|
61
|
+
assert_equal "8", prefix.to_s
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_method_bits
|
65
|
+
prefix = @klass.new(16)
|
66
|
+
str = "1"*16 + "0"*16
|
67
|
+
assert_equal str, prefix.bits
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_method_to_u32
|
71
|
+
@u32_hash.each do |num,u32|
|
72
|
+
assert_equal u32, @klass.new(num).to_u32
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_method_cmp
|
77
|
+
p1 = @klass.new 8
|
78
|
+
p2 = @klass.new 24
|
79
|
+
assert_equal false, (p1 > 16)
|
80
|
+
assert_equal true, (p2 > 16)
|
81
|
+
assert_equal true, (16 >= p1)
|
82
|
+
assert_equal false, (16 >= p2)
|
83
|
+
assert_equal true, (p1 < p2)
|
84
|
+
assert_equal true, (p1 == 8r)
|
85
|
+
assert_equal true, (24r == p2)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_method_plus
|
89
|
+
p1 = @klass.new 8
|
90
|
+
p2 = @klass.new 10
|
91
|
+
assert_equal 18, p1+p2
|
92
|
+
assert_equal 12, p1+4
|
93
|
+
assert_equal 14r, p2+4r
|
94
|
+
assert_equal 12r, 4r+p1
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_method_minus
|
98
|
+
p1 = @klass.new 8
|
99
|
+
p2 = @klass.new 24
|
100
|
+
assert_equal (-16), p1-p2
|
101
|
+
assert_equal 16, p2-p1
|
102
|
+
assert_equal 20, p2-4
|
103
|
+
assert_equal 20r, p2-4r
|
104
|
+
assert_equal 24, 32-p1
|
105
|
+
assert_equal 8, 32-p2
|
106
|
+
assert_equal 8r, 32r-p2
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_initialize
|
110
|
+
assert_raises (ArgumentError) do
|
111
|
+
@klass.new 33
|
112
|
+
end
|
113
|
+
assert_instance_of @klass, @klass.new(8)
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_method_octets
|
117
|
+
@octets_hash.each do |arr,pref|
|
118
|
+
prefix = @klass.new(pref)
|
119
|
+
assert_equal prefix.octets, arr
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_method_brackets
|
124
|
+
@octets_hash.each do |arr,pref|
|
125
|
+
prefix = @klass.new(pref)
|
126
|
+
arr.each_with_index do |oct,index|
|
127
|
+
assert_equal prefix[index], oct
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_method_hostmask
|
133
|
+
prefix = @klass.new(8)
|
134
|
+
assert_equal "0.255.255.255", prefix.hostmask
|
135
|
+
end
|
136
|
+
|
137
|
+
end # class Prefix32Test
|
138
|
+
|
139
|
+
|
140
|
+
class Prefix128Test < Minitest::Test
|
141
|
+
|
142
|
+
def setup
|
143
|
+
@u128_hash = {
|
144
|
+
32 => 340282366841710300949110269838224261120,
|
145
|
+
64 => 340282366920938463444927863358058659840,
|
146
|
+
96 => 340282366920938463463374607427473244160,
|
147
|
+
126 => 340282366920938463463374607431768211452}
|
148
|
+
|
149
|
+
@klass = IPAddress::Prefix128
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_initialize
|
153
|
+
assert_raises(ArgumentError) do
|
154
|
+
@klass.new 129
|
155
|
+
end
|
156
|
+
assert_instance_of @klass, @klass.new(64)
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_method_bits
|
160
|
+
prefix = @klass.new(64)
|
161
|
+
str = "1"*64 + "0"*64
|
162
|
+
assert_equal str, prefix.bits
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_method_to_u32
|
166
|
+
@u128_hash.each do |num,u128|
|
167
|
+
assert_equal u128, @klass.new(num).to_u128
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
end # class Prefix128Test
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class IPAddressTest < Minitest::Test
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@valid_ipv4 = "172.16.10.1/24"
|
7
|
+
@valid_ipv6 = "2001:db8::8:800:200c:417a/64"
|
8
|
+
@valid_mapped = "::13.1.68.3"
|
9
|
+
|
10
|
+
@invalid_ipv4 = "10.0.0.256"
|
11
|
+
@invalid_ipv6 = ":1:2:3:4:5:6:7"
|
12
|
+
@invalid_mapped = "::1:2.3.4"
|
13
|
+
|
14
|
+
@valid_ipv4_uint32 = [4294967295, # 255.255.255.255
|
15
|
+
167772160, # 10.0.0.0
|
16
|
+
3232235520, # 192.168.0.0
|
17
|
+
0]
|
18
|
+
|
19
|
+
@invalid_ipv4_uint32 = [4294967296, # 256.0.0.0
|
20
|
+
"A294967295", # Invalid uINT
|
21
|
+
-1] # Invalid
|
22
|
+
|
23
|
+
|
24
|
+
@ipv4class = IPAddress::IPv4
|
25
|
+
@ipv6class = IPAddress::IPv6
|
26
|
+
@mappedclass = IPAddress::IPv6::Mapped
|
27
|
+
|
28
|
+
@invalid_ipv4 = ["10.0.0.256",
|
29
|
+
"10.0.0.0.0",
|
30
|
+
"10.0.0",
|
31
|
+
"10.0"]
|
32
|
+
|
33
|
+
@valid_ipv4_range = ["10.0.0.1-254",
|
34
|
+
"10.0.1-254.0",
|
35
|
+
"10.1-254.0.0"]
|
36
|
+
|
37
|
+
@method = Module.method("IPAddress")
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_method_IPAddress
|
41
|
+
|
42
|
+
assert_instance_of @ipv4class, @method.call(@valid_ipv4)
|
43
|
+
assert_instance_of @ipv6class, @method.call(@valid_ipv6)
|
44
|
+
assert_instance_of @mappedclass, @method.call(@valid_mapped)
|
45
|
+
|
46
|
+
assert_raises(ArgumentError) {@method.call(@invalid_ipv4)}
|
47
|
+
assert_raises(ArgumentError) {@method.call(@invalid_ipv6)}
|
48
|
+
assert_raises(ArgumentError) {@method.call(@invalid_mapped)}
|
49
|
+
|
50
|
+
assert_instance_of @ipv4class, @method.call(@valid_ipv4_uint32[0])
|
51
|
+
assert_instance_of @ipv4class, @method.call(@valid_ipv4_uint32[1])
|
52
|
+
assert_instance_of @ipv4class, @method.call(@valid_ipv4_uint32[2])
|
53
|
+
assert_instance_of @ipv4class, @method.call(@valid_ipv4_uint32[3])
|
54
|
+
|
55
|
+
assert_raises(ArgumentError) {@method.call(@invalid_ipv4_uint32[0])}
|
56
|
+
assert_raises(ArgumentError) {@method.call(@invalid_ipv4_uint32[1])}
|
57
|
+
assert_raises(ArgumentError) {@method.call(@invalid_ipv4_uint32[2])}
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_module_method_valid?
|
62
|
+
assert_equal true, IPAddress::valid?("10.0.0.0/24")
|
63
|
+
assert_equal true, IPAddress::valid?("10.0.0.0/255.255.255.0")
|
64
|
+
assert_equal false, IPAddress::valid?("10.0.0.0/64")
|
65
|
+
assert_equal false, IPAddress::valid?("10.0.0.0/255.255.255.256")
|
66
|
+
assert_equal true, IPAddress::valid?("::/0")
|
67
|
+
assert_equal true, IPAddress::valid?("2002::1/128")
|
68
|
+
assert_equal true, IPAddress::valid?("dead:beef:cafe:babe::/64")
|
69
|
+
assert_equal false, IPAddress::valid?("2002::1/129")
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_module_method_valid_ip?
|
73
|
+
assert_equal true, IPAddress::valid?("10.0.0.1")
|
74
|
+
assert_equal true, IPAddress::valid?("10.0.0.0")
|
75
|
+
assert_equal true, IPAddress::valid?("2002::1")
|
76
|
+
assert_equal true, IPAddress::valid?("dead:beef:cafe:babe::f0ad")
|
77
|
+
assert_equal false, IPAddress::valid?("10.0.0.256")
|
78
|
+
assert_equal false, IPAddress::valid?("10.0.0.0.0")
|
79
|
+
assert_equal false, IPAddress::valid?("10.0.0")
|
80
|
+
assert_equal false, IPAddress::valid?("10.0")
|
81
|
+
assert_equal false, IPAddress::valid?("2002:::1")
|
82
|
+
assert_equal false, IPAddress::valid?("2002:516:2:200")
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_module_method_valid_ipv4_netmask?
|
86
|
+
assert_equal true, IPAddress::valid_ipv4_netmask?("255.255.255.0")
|
87
|
+
assert_equal false, IPAddress::valid_ipv4_netmask?("10.0.0.1")
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_module_method_valid_ipv4_subnet?
|
91
|
+
assert_equal true, IPAddress::valid_ipv4_subnet?("10.0.0.0/255.255.255.0")
|
92
|
+
assert_equal true, IPAddress::valid_ipv4_subnet?("10.0.0.0/0")
|
93
|
+
assert_equal true, IPAddress::valid_ipv4_subnet?("10.0.0.0/32")
|
94
|
+
assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.0/ABC")
|
95
|
+
assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.1")
|
96
|
+
assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.0/33")
|
97
|
+
assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.256/24")
|
98
|
+
assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.0/255.255.255.256")
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_module_method_valid_ipv6_subnet?
|
102
|
+
assert_equal true, IPAddress::valid_ipv6_subnet?("::/0")
|
103
|
+
assert_equal true, IPAddress::valid_ipv6_subnet?("2002::1/128")
|
104
|
+
assert_equal true, IPAddress::valid_ipv6_subnet?("dead:beef:cafe:babe::/64")
|
105
|
+
assert_equal false, IPAddress::valid_ipv6_subnet?("2002::1/129")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.start
|
5
|
+
|
6
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
8
|
+
require 'ipaddress_2'
|
9
|
+
|
10
|
+
if Minitest.const_defined?('Test')
|
11
|
+
# We're on Minitest 5+. Nothing to do here.
|
12
|
+
else
|
13
|
+
# Minitest 4 doesn't have Minitest::Test yet.
|
14
|
+
Minitest::Test = MiniTest::Unit::TestCase
|
15
|
+
end
|
16
|
+
|
17
|
+
module Minitest
|
18
|
+
|
19
|
+
class Test
|
20
|
+
|
21
|
+
def self.must(name, &block)
|
22
|
+
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
23
|
+
defined = instance_method(test_name) rescue false
|
24
|
+
raise "#{test_name} is already defined in #{self}" if defined
|
25
|
+
if block_given?
|
26
|
+
define_method(test_name, &block)
|
27
|
+
else
|
28
|
+
define_method(test_name) do
|
29
|
+
flunk "No implementation provided for #{name}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
metadata
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ipaddress_2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.11.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- bluemonk
|
8
|
+
- mikemackintosh
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2019-01-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: minitest
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '5.8'
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: 5.8.4
|
52
|
+
type: :development
|
53
|
+
prerelease: false
|
54
|
+
version_requirements: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - "~>"
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '5.8'
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 5.8.4
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: pry
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.10.1
|
69
|
+
type: :development
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.10.1
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: travis
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.8.2
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.8.2
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: jeweler
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.0.1
|
97
|
+
type: :development
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 2.0.1
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: codeclimate-test-reporter
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: simplecov
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
description: |-
|
133
|
+
IPAddress2 is a Ruby library designed to make manipulation
|
134
|
+
of IPv4 and IPv6 addresses both powerful and simple. It mantains
|
135
|
+
a layer of compatibility with Ruby's own IPAddr, while
|
136
|
+
addressing many of its issues.
|
137
|
+
email: adam@21eleven.com
|
138
|
+
executables: []
|
139
|
+
extensions: []
|
140
|
+
extra_rdoc_files:
|
141
|
+
- CHANGELOG.rdoc
|
142
|
+
- LICENSE.txt
|
143
|
+
- README.rdoc
|
144
|
+
files:
|
145
|
+
- ".byebug_history"
|
146
|
+
- ".document"
|
147
|
+
- ".gitignore"
|
148
|
+
- ".rock.yml"
|
149
|
+
- ".travis.yml"
|
150
|
+
- CHANGELOG.md
|
151
|
+
- CHANGELOG.rdoc
|
152
|
+
- CONTRIBUTING.md
|
153
|
+
- Gemfile
|
154
|
+
- LICENSE.txt
|
155
|
+
- README.rdoc
|
156
|
+
- Rakefile
|
157
|
+
- VERSION
|
158
|
+
- ipaddress_2.gemspec
|
159
|
+
- lib/ipaddress_2.rb
|
160
|
+
- lib/ipaddress_2/ipv4.rb
|
161
|
+
- lib/ipaddress_2/ipv6.rb
|
162
|
+
- lib/ipaddress_2/mongoid.rb
|
163
|
+
- lib/ipaddress_2/prefix.rb
|
164
|
+
- lib/ipaddress_2/version.rb
|
165
|
+
- test/ipaddress_2/ipv4_test.rb
|
166
|
+
- test/ipaddress_2/ipv6_test.rb
|
167
|
+
- test/ipaddress_2/mongoid_test.rb
|
168
|
+
- test/ipaddress_2/prefix_test.rb
|
169
|
+
- test/ipaddress_2_test.rb
|
170
|
+
- test/test_helper.rb
|
171
|
+
homepage: https://github.com/ipaddress2-gem/ipaddress2
|
172
|
+
licenses:
|
173
|
+
- MIT
|
174
|
+
metadata: {}
|
175
|
+
post_install_message:
|
176
|
+
rdoc_options: []
|
177
|
+
require_paths:
|
178
|
+
- lib
|
179
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - ">="
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: '0'
|
184
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
requirements: []
|
190
|
+
rubyforge_project:
|
191
|
+
rubygems_version: 2.7.8
|
192
|
+
signing_key:
|
193
|
+
specification_version: 4
|
194
|
+
summary: IPv4/IPv6 address manipulation library
|
195
|
+
test_files: []
|