ip 0.1.0 → 0.1.1

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.
Files changed (3) hide show
  1. data/lib/ip.rb +23 -1
  2. data/test/ip.rb +19 -0
  3. metadata +17 -12
data/lib/ip.rb CHANGED
@@ -25,6 +25,11 @@
25
25
  # perhaps a distant, future release. Any patches that can correct this
26
26
  # issue are most welcome.
27
27
  #
28
+ # Also: Thanks to Tim Howe, who did a lot of initial bug testing and
29
+ # 'trial by fire' as this package came out of it's shell. Writing new
30
+ # methods that made code easier to understand and/or clearer, and
31
+ # making plenty of suggestions made creating this module much easier.
32
+ #
28
33
  # ================================================================
29
34
  #
30
35
  # The compilation of software known as ip.rb is distributed under the
@@ -262,7 +267,24 @@ class IP
262
267
  raise IP::AddressException.new("Fed IP address is not String")
263
268
  end
264
269
  @ip_address = ip_address
265
- @octets = ip_address.split(/\./).collect { |x| x.to_i }
270
+
271
+ #
272
+ # Unbeknowest by me, to_i will not throw an exception if the string
273
+ # can't be converted cleanly - it just truncates, similar to atoi() and perl's int().
274
+ #
275
+ # Code below does a final sanity check.
276
+ #
277
+
278
+ octets = ip_address.split(/\./)
279
+ octets_i = octets.collect { |x| x.to_i }
280
+
281
+ 0.upto(octets.length - 1) do |octet|
282
+ if octets[octet] != octets_i[octet].to_s
283
+ raise IP::AddressException.new("Integer conversion failed")
284
+ end
285
+ end
286
+
287
+ @octets = octets_i
266
288
 
267
289
  # I made a design decision to allow 0.0.0.0 here.
268
290
  if @octets.length != 4 or @octets.find_all { |x| x > 255 }.length > 0
data/test/ip.rb CHANGED
@@ -198,6 +198,25 @@ class AddressTest < Test::Unit::TestCase
198
198
  end
199
199
 
200
200
  assert(false, "init test #4") if ip
201
+
202
+ ip = nil
203
+ begin
204
+ ip = IP::Address.new("255.255.255.255aaaa")
205
+ rescue IP::AddressException => e
206
+ assert(true, "init test #5")
207
+ end
208
+
209
+ assert(false, "init test #5") if ip
210
+
211
+ ip = nil
212
+ begin
213
+ ip = IP::Address.new("255.255.255.")
214
+ rescue IP::AddressException => e
215
+ assert(true, "init test #6")
216
+ end
217
+
218
+ assert(false, "init test #6") if ip
219
+
201
220
  end
202
221
 
203
222
  def test_accessor
metadata CHANGED
@@ -3,11 +3,11 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: ip
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2006-01-20 00:00:00 -08:00
8
- summary: "Ruby classes to work with IP address, ranges, and netmasks"
6
+ version: 0.1.1
7
+ date: 2006-02-08 00:00:00 -08:00
8
+ summary: Ruby classes to work with IP address, ranges, and netmasks
9
9
  require_paths:
10
- - lib
10
+ - lib
11
11
  email: erik@hollensbe.org
12
12
  homepage:
13
13
  rubyforge_project: ip-address
@@ -18,23 +18,28 @@ bindir: bin
18
18
  has_rdoc: true
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
20
20
  requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
25
24
  version:
26
25
  platform: ruby
27
26
  signing_key:
28
27
  cert_chain:
29
28
  authors:
30
- - Erik Hollensbe
29
+ - Erik Hollensbe
31
30
  files:
32
- - lib/ip.rb
31
+ - lib/ip.rb
33
32
  test_files:
34
- - test/ip.rb
33
+ - test/ip.rb
35
34
  rdoc_options: []
35
+
36
36
  extra_rdoc_files: []
37
+
37
38
  executables: []
39
+
38
40
  extensions: []
41
+
39
42
  requirements: []
40
- dependencies: []
43
+
44
+ dependencies: []
45
+