ipaddress_2 0.11.0
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.
- 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: []
|