ip-ranges 0.1.3 → 0.2.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4b259f6d6fdd7a56ae0f743d4847dcaed64b4507
4
+ data.tar.gz: 32c8d867812c27cf93144a5fb8c030e2ac1f23f1
5
+ SHA512:
6
+ metadata.gz: 9fe1d1356fcf54a2e53fb59809d881176bbfc743ee01af6ebe80776ef9a3dd7cd04b21cc5d6f8f1360f0f6f55fa3532448708dcf21bf173c3517a4c80ef69fe7
7
+ data.tar.gz: 382d3042a30e8ae524dd311fcb20eda44f97cca341d84af27d51f074a86dcba7aa584aa2b2161fbbfc504a4633b82a30d0add5ef07414bf537e4e43d4d605d01
@@ -2,7 +2,7 @@ GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
4
  columnize (0.8.9)
5
- diff-lcs (1.1.3)
5
+ diff-lcs (1.2.5)
6
6
  gem-this (0.3.7)
7
7
  gemcutter (0.7.1)
8
8
  linecache (0.46)
@@ -13,14 +13,18 @@ GEM
13
13
  rdoc (3.9.4)
14
14
  rdoc-data (3.12)
15
15
  rdoc (> 2.5, < 4.0)
16
- rspec (2.6.0)
17
- rspec-core (~> 2.6.0)
18
- rspec-expectations (~> 2.6.0)
19
- rspec-mocks (~> 2.6.0)
20
- rspec-core (2.6.4)
21
- rspec-expectations (2.6.0)
22
- diff-lcs (~> 1.1.2)
23
- rspec-mocks (2.6.0)
16
+ rspec (3.1.0)
17
+ rspec-core (~> 3.1.0)
18
+ rspec-expectations (~> 3.1.0)
19
+ rspec-mocks (~> 3.1.0)
20
+ rspec-core (3.1.7)
21
+ rspec-support (~> 3.1.0)
22
+ rspec-expectations (3.1.2)
23
+ diff-lcs (>= 1.2.0, < 2.0)
24
+ rspec-support (~> 3.1.0)
25
+ rspec-mocks (3.1.3)
26
+ rspec-support (~> 3.1.0)
27
+ rspec-support (3.1.2)
24
28
  ruby-debug (0.10.4)
25
29
  columnize (>= 0.1)
26
30
  ruby-debug-base (~> 0.10.4.0)
data/Rakefile CHANGED
@@ -36,17 +36,18 @@ spec = Gem::Specification.new do |s|
36
36
 
37
37
  # Change these as appropriate
38
38
  s.name = "ip-ranges"
39
- s.version = "0.1.3"
39
+ s.version = "0.2.0"
40
40
  s.summary = "Compare and manipulate ranges of IP numbers"
41
41
  s.author = "David Salgado"
42
42
  s.email = "david@digitalronin.com"
43
43
  s.homepage = "https://digitalronin.github.io/2011/09/10/ip-ranges-gem/"
44
44
 
45
45
  s.has_rdoc = true
46
- s.extra_rdoc_files = %w(README.markdown)
47
- s.rdoc_options = %w(--main README.markdown)
46
+ s.description = "Compare multiple IP ranges for overlaps, equivalence and containment"
47
+ # s.extra_rdoc_files = %w(README)
48
+ s.rdoc_options = %w(-x pkg)
48
49
 
49
- # Add any extra files to include in the gem
50
+ # Add any extra files to include in the gem (like your README)
50
51
  s.files = %w(Gemfile Gemfile.lock Rakefile README.markdown) + Dir.glob("{spec,lib}/**/*")
51
52
  s.require_paths = ["lib"]
52
53
 
@@ -56,6 +57,7 @@ spec = Gem::Specification.new do |s|
56
57
 
57
58
  # If your tests use any gems, include them here
58
59
  s.add_development_dependency("rspec")
60
+ s.add_development_dependency("rdoc")
59
61
  s.add_development_dependency("ruby-debug")
60
62
  end
61
63
 
@@ -11,18 +11,28 @@ module IpRanges
11
11
  # Last IP number in the range, as an Ip object
12
12
  attr_accessor :last
13
13
 
14
- SINGLE_IP = /^\d+\.\d+\.\d+\.\d+$/
15
- DOTTED_RANGE = /^(\d+\.\d+\.\d+\.\d+)\.\.(\d+\.\d+\.\d+\.\d+)$/
16
- CIDR_RANGE = %r[/]
14
+ # Throttle (or don't) how fast we yield each_ip
15
+ attr_accessor :throttle
16
+ attr_accessor :sleep_time
17
17
 
18
18
  BATCHSIZE = 250
19
- PAUSE = 2
19
+ PAUSE = 2
20
+
21
+
22
+ SINGLE_IP = /^\d+\.\d+\.\d+\.\d+$/
23
+ DOTTED_RANGE = /^(\d+\.\d+\.\d+\.\d+)\.\.(\d+\.\d+\.\d+\.\d+)$/
24
+ CIDR_RANGE = %r[/]
20
25
 
21
26
  # Instatiate a range from a string representation which can be a single
22
27
  # Ip number, a dotted range or a CIDR range
23
28
  #
24
29
  # Arguments:
25
- # * A +Hash+ with a single key ':range' whose value is a string defining the range.
30
+ # * A +Hash+ with a key ':range' whose value is a string defining the range.
31
+ #
32
+ # Optional Arguments (supply as hash keys):
33
+ # * ':throttle' true/false (default: true), sleep in each_ip after every batch_size IPs
34
+ # * ':batch_size' (for throttling - default: 250)
35
+ # * ':sleep_time' (for throttling - default: 2)
26
36
  #
27
37
  # Examples:
28
38
  #
@@ -31,19 +41,24 @@ module IpRanges
31
41
  # IpRanges::Range.new :range => '1.2.3.0/24' => a range containing 256 Ip numbers (1.2.3.0 .. 1.2.3.255)
32
42
  #
33
43
  def initialize(params)
34
- string = params[:range].gsub(' ', '')
44
+ @throttle = params.fetch(:throttle, true)
45
+ @sleep_time = params.fetch(:sleep_time, PAUSE)
46
+ @batch_size = params.fetch(:batch_size, BATCHSIZE)
47
+
48
+ string = params.fetch(:range).gsub(' ', '')
49
+
35
50
  case string
36
51
  when SINGLE_IP
37
52
  @first = Ip.new :number => string
38
- @last = Ip.new :number => string
53
+ @last = Ip.new :number => string
39
54
  when DOTTED_RANGE
40
55
  @first = Ip.new :number => $1
41
- @last = Ip.new :number => $2
56
+ @last = Ip.new :number => $2
42
57
  when CIDR_RANGE
43
58
  begin
44
- cidr = NetAddr::CIDR.create(string)
59
+ cidr = NetAddr::CIDR.create(string)
45
60
  @first = Ip.new :number => cidr.first
46
- @last = Ip.new :number => cidr.last
61
+ @last = Ip.new :number => cidr.last
47
62
  rescue Exception => e
48
63
  puts "Error creating CIDR range from: #{string}"
49
64
  raise e
@@ -51,6 +66,13 @@ module IpRanges
51
66
  end
52
67
  end
53
68
 
69
+ # Return the number of IPs within the range
70
+ def count
71
+ rtn = 0
72
+ each_ip {|ip| rtn += 1}
73
+ rtn
74
+ end
75
+
54
76
  def to_s
55
77
  if empty?
56
78
  ''
@@ -136,13 +158,13 @@ module IpRanges
136
158
  def throttle
137
159
  @counter += 1
138
160
  if @counter % BATCHSIZE == 0
139
- take_a_nap
161
+ take_a_nap if throttle
140
162
  end
141
163
  end
142
164
 
143
165
  def take_a_nap
144
- log "Counter: #{$counter}, sleeping for #{PAUSE} seconds" if $verbose
145
- sleep PAUSE
166
+ log "Counter: #{$counter}, sleeping for #{sleep_time} seconds" if $verbose
167
+ sleep sleep_time
146
168
  end
147
169
 
148
170
  end
@@ -8,87 +8,87 @@ describe IpRanges::Ip do
8
8
  it "duplicates with a different object" do
9
9
  @ip.number = "1.200.3.4"
10
10
  ip2 = @ip.dup
11
- ip2.object_id.should_not == @ip.object_id
11
+ expect(ip2.object_id).to_not eq(@ip.object_id)
12
12
  end
13
13
 
14
14
  it "duplicates" do
15
15
  @ip.number = "1.200.3.4"
16
16
  ip2 = @ip.dup
17
- ip2.should == @ip
17
+ expect(ip2).to eq(@ip)
18
18
  end
19
19
 
20
20
  it "is greater than or equal to" do
21
21
  @ip.number = "1.200.3.4"
22
22
  eq = IpRanges::Ip.new :number => "1.200.3.4"
23
23
  lt = IpRanges::Ip.new :number => "1.200.3.3"
24
- [eq, lt].each {|test| (@ip >= test).should be_true}
24
+ [eq, lt].each {|test| expect(@ip >= test).to be_truthy}
25
25
  end
26
26
 
27
27
  it "is equivalent" do
28
28
  @ip.number = "1.200.3.4"
29
29
  ip2 = IpRanges::Ip.new :number => "1.200.3.4"
30
- @ip.should == ip2
30
+ expect(@ip).to eq(ip2)
31
31
  end
32
32
 
33
33
  it "renders to string" do
34
34
  @ip.number = "1.200.3.4"
35
- @ip.to_s.should == "1.200.3.4"
35
+ expect(@ip.to_s).to eq("1.200.3.4")
36
36
  end
37
37
 
38
38
  it "knows 1.2.3.255 < 1.2.4.0" do
39
39
  @ip.number = '1.2.3.255'
40
40
  ip2 = IpRanges::Ip.new :number => "1.2.4.0"
41
- (@ip > ip2).should be_false
41
+ expect((@ip > ip2)).to be_falsey
42
42
  end
43
43
 
44
44
  it "knows 1.2.4.0 >= 1.2.3.255" do
45
45
  @ip.number = "1.2.4.0"
46
46
  ip2 = IpRanges::Ip.new :number => '1.2.3.255'
47
- (@ip >= ip2).should be_true
47
+ expect((@ip >= ip2)).to be_truthy
48
48
  end
49
49
 
50
50
  it "knows 1.200.3.4 > 1.199.3.4" do
51
51
  @ip.number = "1.200.3.4"
52
52
  ip2 = IpRanges::Ip.new :number => '1.199.3.4'
53
- (@ip > ip2).should be_true
53
+ expect((@ip > ip2)).to be_truthy
54
54
  end
55
55
 
56
56
  it "knows 1.2.3.4 > 1.2.2.4" do
57
57
  @ip.number = "1.2.3.4"
58
58
  ip2 = IpRanges::Ip.new :number => '1.2.2.4'
59
- (@ip > ip2).should be_true
59
+ expect((@ip > ip2)).to be_truthy
60
60
  end
61
61
 
62
62
  it "knows 1.2.3.4 > 1.2.3.3" do
63
63
  @ip.number = "1.2.3.4"
64
64
  ip2 = IpRanges::Ip.new :number => '1.2.3.3'
65
- (@ip > ip2).should be_true
65
+ expect((@ip > ip2)).to be_truthy
66
66
  end
67
67
 
68
68
  it "knows 1.2.3.3 <= 1.2.3.4" do
69
69
  @ip.number = "1.2.3.3"
70
70
  ip2 = IpRanges::Ip.new :number => '1.2.3.4'
71
- (@ip > ip2).should be_false
71
+ expect((@ip > ip2)).to be_falsey
72
72
  end
73
73
 
74
74
  it "increments when 2nd tuple hits 255" do
75
75
  @ip.number = "1.255.255.255"
76
- @ip.increment.should == "2.0.0.0"
76
+ expect(@ip.increment).to eq("2.0.0.0")
77
77
  end
78
78
 
79
79
  it "increments when 3rd tuple hits 255" do
80
80
  @ip.number = "1.2.255.255"
81
- @ip.increment.should == "1.3.0.0"
81
+ expect(@ip.increment).to eq("1.3.0.0")
82
82
  end
83
83
 
84
84
  it "increments when last tuple hits 255" do
85
85
  @ip.number = "1.2.3.255"
86
- @ip.increment.should == "1.2.4.0"
86
+ expect(@ip.increment).to eq("1.2.4.0")
87
87
  end
88
88
 
89
89
  it "increments last tuple" do
90
90
  @ip.number = '1.2.3.4'
91
- @ip.increment.should == "1.2.3.5"
91
+ expect(@ip.increment).to eq("1.2.3.5")
92
92
  end
93
93
 
94
94
  end
@@ -1,24 +1,51 @@
1
1
  require 'spec/spec_helper'
2
2
 
3
3
  describe IpRanges::Range do
4
- before do
4
+ let(:range_str) { '1.2.3.4' }
5
+ subject(:range) { described_class.new(:range => range_str, :throttle => false) }
6
+
7
+ describe "#count" do
8
+ context "with one ip" do
9
+ let(:range_str) { '1.2.3.4' }
10
+
11
+ it "counts" do
12
+ expect(range.count).to eq(1)
13
+ end
14
+ end
15
+
16
+ context "with dotted range" do
17
+ let(:range_str) { '1.2.3.4 .. 1.2.3.6' }
18
+
19
+ it "counts" do
20
+ expect(range.count).to eq(3)
21
+ end
22
+ end
23
+
24
+
25
+ context "with cidr range" do
26
+ let(:range_str) { '1.2.3.0/24' }
27
+
28
+ it "counts" do
29
+ expect(range.count).to eq(256)
30
+ end
31
+ end
5
32
  end
6
33
 
7
34
  describe "#to_s" do
8
35
 
9
36
  it "prints empty string" do
10
37
  range = described_class.new(:range => '')
11
- range.to_s.should eq('')
38
+ expect(range.to_s).to eq('')
12
39
  end
13
40
 
14
41
  it "prints one ip" do
15
42
  range = described_class.new(:range => '1.2.3.4')
16
- range.to_s.should eq('1.2.3.4')
43
+ expect(range.to_s).to eq('1.2.3.4')
17
44
  end
18
45
 
19
46
  it "prints dotted range" do
20
47
  range = described_class.new(:range => '1.2.3.4 .. 1.2.3.6')
21
- range.to_s.should eq('1.2.3.4..1.2.3.6')
48
+ expect(range.to_s).to eq('1.2.3.4..1.2.3.6')
22
49
  end
23
50
 
24
51
  end
@@ -34,17 +61,17 @@ describe IpRanges::Range do
34
61
 
35
62
  it "pushes" do
36
63
  res = empty.push(ip1)
37
- res.should be_true
64
+ expect(res).to be_truthy
38
65
  end
39
66
 
40
67
  it "sets first ip" do
41
68
  empty.push(ip1)
42
- empty.first.should eq(ip1)
69
+ expect(empty.first).to eq(ip1)
43
70
  end
44
71
 
45
72
  it "sets last ip" do
46
73
  empty.push(ip1)
47
- empty.last.should eq(ip1)
74
+ expect(empty.last).to eq(ip1)
48
75
  end
49
76
  end
50
77
 
@@ -54,24 +81,24 @@ describe IpRanges::Range do
54
81
  context "pushing next ip" do
55
82
  it "pushes" do
56
83
  res = r1.push(ip2)
57
- res.should be_true
84
+ expect(res).to be_truthy
58
85
  end
59
86
 
60
87
  it "sets last ip" do
61
88
  r1.push(ip2)
62
- r1.last.should eq(ip2)
89
+ expect(r1.last).to eq(ip2)
63
90
  end
64
91
  end
65
92
 
66
93
  context "pushing non-contiguous ip" do
67
94
  it "doesn't push" do
68
95
  res = r1.push(ip3)
69
- res.should be_false
96
+ expect(res).to be_falsey
70
97
  end
71
98
 
72
99
  it "doesn't set last ip" do
73
100
  r1.push(ip3)
74
- r1.last.should eq(r1.first)
101
+ expect(r1.last).to eq(r1.first)
75
102
  end
76
103
  end
77
104
  end
@@ -82,24 +109,24 @@ describe IpRanges::Range do
82
109
  context "pushing next ip" do
83
110
  it "pushes" do
84
111
  res = range.push(ip3)
85
- res.should be_true
112
+ expect(res).to be_truthy
86
113
  end
87
114
 
88
115
  it "sets last ip" do
89
116
  range.push(ip3)
90
- range.last.should eq(ip3)
117
+ expect(range.last).to eq(ip3)
91
118
  end
92
119
  end
93
120
 
94
121
  context "pushing non-contiguous ip" do
95
122
  it "doesn't push" do
96
123
  res = range.push(ip4)
97
- res.should be_false
124
+ expect(res).to be_falsey
98
125
  end
99
126
 
100
127
  it "doesn't set last ip" do
101
128
  range.push(ip4)
102
- range.last.should eq(ip2)
129
+ expect(range.last).to eq(ip2)
103
130
  end
104
131
  end
105
132
  end
@@ -110,41 +137,41 @@ describe IpRanges::Range do
110
137
  it "knows when range a contains range b" do
111
138
  ipr1 = IpRanges::Range.new :range => '1.2.3.3..1.2.3.5'
112
139
  ipr2 = IpRanges::Range.new :range => '1.2.3.4..1.2.3.5'
113
- ipr1.contains_range?(ipr2).should be_true
140
+ expect(ipr1.contains_range?(ipr2)).to be_truthy
114
141
  end
115
142
 
116
143
  it "knows when range a does not contain range b" do
117
144
  ipr1 = IpRanges::Range.new :range => '1.2.3.4..1.2.3.5'
118
145
  ipr2 = IpRanges::Range.new :range => '1.2.3.5..1.2.3.6'
119
- ipr1.contains_range?(ipr2).should be_false
146
+ expect(ipr1.contains_range?(ipr2)).to be_falsey
120
147
  end
121
148
 
122
149
  it "knows there is an overlap" do
123
150
  ipr1 = IpRanges::Range.new :range => '1.2.3.4'
124
151
  ipr2 = IpRanges::Range.new :range => '1.2.3.4'
125
- ipr1.overlaps_range?(ipr2).should be_true
152
+ expect(ipr1.overlaps_range?(ipr2)).to be_truthy
126
153
  end
127
154
 
128
155
  it "knows there is no overlap" do
129
156
  ipr1 = IpRanges::Range.new :range => '1.2.3.4'
130
157
  ipr2 = IpRanges::Range.new :range => '1.2.3.5'
131
- ipr1.overlaps_range?(ipr2).should be_false
158
+ expect(ipr1.overlaps_range?(ipr2)).to be_falsey
132
159
  end
133
160
 
134
161
  it "accepts Ip object for contains_ip" do
135
162
  ipr = IpRanges::Range.new :range => '1.2.3.4..1.2.3.6'
136
163
  ip = IpRanges::Ip.new :number => '1.2.3.5'
137
- ipr.contains_ip?(ip).should be_true
164
+ expect(ipr.contains_ip?(ip)).to be_truthy
138
165
  end
139
166
 
140
167
  it "knows it doesn't contain ip numbers" do
141
168
  ipr = IpRanges::Range.new :range => '1.2.3.4..1.2.3.6'
142
- %w(1.2.3.3 1.2.3.7).each {|num| ipr.contains_ip?(num).should be_false}
169
+ %w(1.2.3.3 1.2.3.7).each {|num| expect(ipr.contains_ip?(num)).to be_falsey}
143
170
  end
144
171
 
145
172
  it "knows it contains an ip number" do
146
173
  ipr = IpRanges::Range.new :range => '1.2.3.4..1.2.3.6'
147
- %w(1.2.3.4 1.2.3.5 1.2.3.6).each {|num| ipr.contains_ip?(num).should be_true}
174
+ %w(1.2.3.4 1.2.3.5 1.2.3.6).each {|num| expect(ipr.contains_ip?(num)).to be_truthy}
148
175
  end
149
176
 
150
177
  end
@@ -152,8 +179,8 @@ describe IpRanges::Range do
152
179
  it "knows it equals another range" do
153
180
  dotted = IpRanges::Range.new :range => '1.2.3.0..1.2.3.255'
154
181
  cidr = IpRanges::Range.new :range => '1.2.3.0/24'
155
- (dotted == cidr).should be_true
156
- (cidr == dotted).should be_true
182
+ expect(dotted == cidr).to be_truthy
183
+ expect(cidr == dotted).to be_truthy
157
184
  end
158
185
 
159
186
  it "iterates over all ips" do
@@ -165,56 +192,56 @@ describe IpRanges::Range do
165
192
  ]
166
193
  arr = []
167
194
  ipr.each_ip {|ip| arr << ip}
168
- arr.should == expected
195
+ expect(arr).to eq(expected)
169
196
  end
170
197
 
171
198
  it "returns last ip from cidr range" do
172
199
  ipr = IpRanges::Range.new :range => '1.2.3.0/24'
173
- ipr.last.to_s.should == '1.2.3.255'
200
+ expect(ipr.last.to_s).to eq('1.2.3.255')
174
201
  end
175
202
 
176
203
  it "returns first ip from cidr range" do
177
204
  ipr = IpRanges::Range.new :range => '1.2.3.0/24'
178
- ipr.first.to_s.should == '1.2.3.0'
205
+ expect(ipr.first.to_s).to eq('1.2.3.0')
179
206
  end
180
207
 
181
208
  it "instantiates from a cidr range" do
182
209
  ipr = IpRanges::Range.new :range => '1.2.3.0/24'
183
- ipr.should be_kind_of(IpRanges::Range)
210
+ expect(ipr).to be_kind_of(IpRanges::Range)
184
211
  end
185
212
 
186
213
  it "returns last ip from dotted range" do
187
214
  ipr = IpRanges::Range.new :range => '1.2.3.4 .. 1.2.3.5'
188
- ipr.last.to_s.should == '1.2.3.5'
215
+ expect(ipr.last.to_s).to eq('1.2.3.5')
189
216
  end
190
217
 
191
218
  it "returns first ip from dotted range" do
192
219
  ipr = IpRanges::Range.new :range => '1.2.3.4 .. 1.2.3.5'
193
- ipr.first.to_s.should == '1.2.3.4'
220
+ expect(ipr.first.to_s).to eq('1.2.3.4')
194
221
  end
195
222
 
196
223
  it "instantiates from a dotted range" do
197
224
  ipr = IpRanges::Range.new :range => '1.2.3.4 .. 1.2.3.5'
198
- ipr.should be_kind_of(IpRanges::Range)
225
+ expect(ipr).to be_kind_of(IpRanges::Range)
199
226
  end
200
227
 
201
228
  it "returns last ip" do
202
229
  ipr = IpRanges::Range.new :range => '1.2.3.4'
203
- ipr.last.to_s.should == '1.2.3.4'
230
+ expect(ipr.last.to_s).to eq('1.2.3.4')
204
231
  end
205
232
 
206
233
  it "returns first ip" do
207
234
  ipr = IpRanges::Range.new :range => '1.2.3.4'
208
- ipr.first.to_s.should == '1.2.3.4'
235
+ expect(ipr.first.to_s).to eq('1.2.3.4')
209
236
  end
210
237
 
211
238
  it "instantiates from a single IP" do
212
239
  ipr = IpRanges::Range.new :range => '1.2.3.4'
213
- ipr.should be_kind_of(IpRanges::Range)
240
+ expect(ipr).to be_kind_of(IpRanges::Range)
214
241
  end
215
242
 
216
243
  it "instantiates" do
217
244
  ipr = IpRanges::Range.new :range => ''
218
- ipr.should be_kind_of(IpRanges::Range)
245
+ expect(ipr).to be_kind_of(IpRanges::Range)
219
246
  end
220
247
  end
@@ -8,30 +8,30 @@ describe IpRanges do
8
8
  it "explains range a equals range b" do
9
9
  list = %w(1.2.3.0..1.2.3.255 1.2.3.0/24)
10
10
  overlaps = check_for_overlaps(list)
11
- overlaps[0].should == "1.2.3.0..1.2.3.255 equals range 1.2.3.0/24"
11
+ expect(overlaps[0]).to eq("1.2.3.0..1.2.3.255 equals range 1.2.3.0/24")
12
12
  end
13
13
 
14
14
  it "explains range a is contained by range b" do
15
15
  list = %w(1.2.3.4..1.2.3.5 1.2.3.4..1.2.3.8)
16
16
  overlaps = check_for_overlaps(list)
17
- overlaps[0].should == "1.2.3.4..1.2.3.5 is contained by range 1.2.3.4..1.2.3.8"
17
+ expect(overlaps[0]).to eq("1.2.3.4..1.2.3.5 is contained by range 1.2.3.4..1.2.3.8")
18
18
  end
19
19
 
20
20
  it "explains range a contains range b" do
21
21
  list = %w(1.2.3.4..1.2.3.8 1.2.3.4..1.2.3.5)
22
22
  overlaps = check_for_overlaps(list)
23
- overlaps[0].should == "1.2.3.4..1.2.3.8 contains range 1.2.3.4..1.2.3.5"
23
+ expect(overlaps[0]).to eq("1.2.3.4..1.2.3.8 contains range 1.2.3.4..1.2.3.5")
24
24
  end
25
25
 
26
26
  it "explains overlap" do
27
27
  list = %w(1.2.3.4..1.2.3.8 1.2.3.5..1.2.3.9)
28
28
  overlaps = check_for_overlaps(list)
29
- overlaps[0].should == "1.2.3.4..1.2.3.8 overlaps with 1.2.3.5..1.2.3.9"
29
+ expect(overlaps[0]).to eq("1.2.3.4..1.2.3.8 overlaps with 1.2.3.5..1.2.3.9")
30
30
  end
31
31
 
32
32
  it "counts the overlaps" do
33
33
  list = %w(1.2.3.4..1.2.3.8 1.2.3.4..1.2.3.5 1.2.3.8)
34
- check_for_overlaps(list).size.should == 2
34
+ expect(check_for_overlaps(list).size).to eq(2)
35
35
  end
36
36
 
37
37
  it "takes a list" do
metadata CHANGED
@@ -1,13 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ip-ranges
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
5
- prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 3
10
- version: 0.1.3
4
+ version: 0.2.0
11
5
  platform: ruby
12
6
  authors:
13
7
  - David Salgado
@@ -15,60 +9,53 @@ autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
11
 
18
- date: 2014-08-03 00:00:00 Z
12
+ date: 2014-12-19 00:00:00 Z
19
13
  dependencies:
20
14
  - !ruby/object:Gem::Dependency
21
- type: :runtime
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
- none: false
15
+ requirement: &id001 !ruby/object:Gem::Requirement
24
16
  requirements:
25
17
  - - ~>
26
18
  - !ruby/object:Gem::Version
27
- hash: 3
28
- segments:
29
- - 1
30
- - 5
31
- - 0
32
19
  version: 1.5.0
33
- requirement: *id001
20
+ version_requirements: *id001
34
21
  prerelease: false
22
+ type: :runtime
35
23
  name: netaddr
36
24
  - !ruby/object:Gem::Dependency
37
- type: :development
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
39
- none: false
25
+ requirement: &id002 !ruby/object:Gem::Requirement
40
26
  requirements:
41
- - - ">="
27
+ - &id003
28
+ - ">="
42
29
  - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
30
  version: "0"
47
- requirement: *id002
31
+ version_requirements: *id002
48
32
  prerelease: false
33
+ type: :development
49
34
  name: rspec
50
35
  - !ruby/object:Gem::Dependency
36
+ requirement: &id004 !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - *id003
39
+ version_requirements: *id004
40
+ prerelease: false
51
41
  type: :development
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
53
- none: false
42
+ name: rdoc
43
+ - !ruby/object:Gem::Dependency
44
+ requirement: &id005 !ruby/object:Gem::Requirement
54
45
  requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
61
- requirement: *id003
46
+ - *id003
47
+ version_requirements: *id005
62
48
  prerelease: false
49
+ type: :development
63
50
  name: ruby-debug
64
- description:
51
+ description: Compare multiple IP ranges for overlaps, equivalence and containment
65
52
  email: david@digitalronin.com
66
53
  executables: []
67
54
 
68
55
  extensions: []
69
56
 
70
- extra_rdoc_files:
71
- - README.markdown
57
+ extra_rdoc_files: []
58
+
72
59
  files:
73
60
  - Gemfile
74
61
  - Gemfile.lock
@@ -84,36 +71,26 @@ files:
84
71
  homepage: https://digitalronin.github.io/2011/09/10/ip-ranges-gem/
85
72
  licenses: []
86
73
 
74
+ metadata: {}
75
+
87
76
  post_install_message:
88
77
  rdoc_options:
89
- - --main
90
- - README.markdown
78
+ - -x
79
+ - pkg
91
80
  require_paths:
92
81
  - lib
93
82
  required_ruby_version: !ruby/object:Gem::Requirement
94
- none: false
95
83
  requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- hash: 3
99
- segments:
100
- - 0
101
- version: "0"
84
+ - *id003
102
85
  required_rubygems_version: !ruby/object:Gem::Requirement
103
- none: false
104
86
  requirements:
105
- - - ">="
106
- - !ruby/object:Gem::Version
107
- hash: 3
108
- segments:
109
- - 0
110
- version: "0"
87
+ - *id003
111
88
  requirements: []
112
89
 
113
90
  rubyforge_project:
114
- rubygems_version: 1.8.25
91
+ rubygems_version: 2.0.14
115
92
  signing_key:
116
- specification_version: 3
93
+ specification_version: 4
117
94
  summary: Compare and manipulate ranges of IP numbers
118
95
  test_files: []
119
96