ipaddr 1.2.7 → 1.2.9

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ipaddr.rb +38 -18
  3. metadata +4 -8
  4. data/ipaddr.gemspec +0 -36
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 566f76e26928f5a6014a11f985f08d1299dd06e7cb273cbc90b2553182b90006
4
- data.tar.gz: f966e0490212bdb9194d05e6ee1d7e8df85ce622ed3692c46b2539c648e0315f
3
+ metadata.gz: 3d7f44f2a3874755d2b38a4cf417bc3b86f1298a92a47ce0df1c6da780982f10
4
+ data.tar.gz: d7b75a507f7345cfdb5fa1e7141748031b102e843982a5d627fb3d2f9ff9c302
5
5
  SHA512:
6
- metadata.gz: 02e29f8adc3da01f5db2c02101dab218015ab78c9b628060945bbbf328e10391962afd254c0ce5cb9d6a86d68486120f9298673ca9ff133325fd7df700804af6
7
- data.tar.gz: b14fd4218bfdb839dee0fa22a334a217a39a8493ea9e7977684a0418819a337386727d0c47f67868848d018e7f7659f52dabeef686e20ad948a462683915d69c
6
+ metadata.gz: 34b061ae03573b58b00b867655c94edb42970eccf6297ac29915fb5e9cec430479eadb0cae90c9857b395ed9d220cd9eaa596a791f0225237113ab010b6dcba4
7
+ data.tar.gz: 7347ead0e35fa0bad997db445806eda0bdc6d8ddcffba1b8ff6d8d36f3c3febfa429e59bf36a0b5381690c3881163b070b858dc92cea1d8eca887657a4085f96
data/lib/ipaddr.rb CHANGED
@@ -40,7 +40,8 @@ require 'socket'
40
40
  # p ipaddr3 #=> #<IPAddr: IPv4:192.168.2.0/255.255.255.0>
41
41
 
42
42
  class IPAddr
43
- VERSION = "1.2.7"
43
+ # The version string
44
+ VERSION = "1.2.9"
44
45
 
45
46
  # 32 bit mask for IPv4
46
47
  IN4MASK = 0xffffffff
@@ -151,8 +152,22 @@ class IPAddr
151
152
  return self.clone.set(addr_mask(~@addr))
152
153
  end
153
154
 
155
+ # Returns a new ipaddr greater than the original address by offset
156
+ def +(offset)
157
+ self.clone.set(@addr + offset, @family)
158
+ end
159
+
160
+ # Returns a new ipaddr less than the original address by offset
161
+ def -(offset)
162
+ self.clone.set(@addr - offset, @family)
163
+ end
164
+
154
165
  # Returns true if two ipaddrs are equal.
155
166
  def ==(other)
167
+ if other.nil?
168
+ return false
169
+ end
170
+
156
171
  other = coerce_other(other)
157
172
  rescue
158
173
  false
@@ -282,7 +297,7 @@ class IPAddr
282
297
  @addr & 0xff000000 == 0x7f000000 # 127.0.0.1/8
283
298
  when Socket::AF_INET6
284
299
  @addr == 1 || # ::1
285
- (@addr & 0xffff_0000_0000 == 0xffff_0000_0000 && (
300
+ (@addr >> 32 == 0xffff && (
286
301
  @addr & 0xff000000 == 0x7f000000 # ::ffff:127.0.0.1/8
287
302
  ))
288
303
  else
@@ -303,10 +318,10 @@ class IPAddr
303
318
  @addr & 0xffff0000 == 0xc0a80000 # 192.168.0.0/16
304
319
  when Socket::AF_INET6
305
320
  @addr & 0xfe00_0000_0000_0000_0000_0000_0000_0000 == 0xfc00_0000_0000_0000_0000_0000_0000_0000 ||
306
- (@addr & 0xffff_0000_0000 == 0xffff_0000_0000 && (
321
+ (@addr >> 32 == 0xffff && (
307
322
  @addr & 0xff000000 == 0x0a000000 || # ::ffff:10.0.0.0/8
308
- @addr & 0xfff00000 == 0xac100000 || # ::ffff::172.16.0.0/12
309
- @addr & 0xffff0000 == 0xc0a80000 # ::ffff::192.168.0.0/16
323
+ @addr & 0xfff00000 == 0xac100000 || # ::ffff:172.16.0.0/12
324
+ @addr & 0xffff0000 == 0xc0a80000 # ::ffff:192.168.0.0/16
310
325
  ))
311
326
  else
312
327
  raise AddressFamilyError, "unsupported address family"
@@ -324,7 +339,7 @@ class IPAddr
324
339
  @addr & 0xffff0000 == 0xa9fe0000 # 169.254.0.0/16
325
340
  when Socket::AF_INET6
326
341
  @addr & 0xffc0_0000_0000_0000_0000_0000_0000_0000 == 0xfe80_0000_0000_0000_0000_0000_0000_0000 || # fe80::/10
327
- (@addr & 0xffff_0000_0000 == 0xffff_0000_0000 && (
342
+ (@addr >> 32 == 0xffff && (
328
343
  @addr & 0xffff0000 == 0xa9fe0000 # ::ffff:169.254.0.0/16
329
344
  ))
330
345
  else
@@ -343,7 +358,7 @@ class IPAddr
343
358
  _ipv4_compat?
344
359
  end
345
360
 
346
- def _ipv4_compat?
361
+ def _ipv4_compat? # :nodoc:
347
362
  if !ipv6? || (@addr >> 32) != 0
348
363
  return false
349
364
  end
@@ -357,7 +372,7 @@ class IPAddr
357
372
  # into an IPv4-mapped IPv6 address.
358
373
  def ipv4_mapped
359
374
  if !ipv4?
360
- raise InvalidAddressError, "not an IPv4 address: #{@addr}"
375
+ raise InvalidAddressError, "not an IPv4 address: #{to_s}"
361
376
  end
362
377
  clone = self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)
363
378
  clone.instance_variable_set(:@mask_addr, @mask_addr | 0xffffffffffffffffffffffff00000000)
@@ -369,9 +384,11 @@ class IPAddr
369
384
  def ipv4_compat
370
385
  warn "IPAddr\##{__callee__} is obsolete", uplevel: 1 if $VERBOSE
371
386
  if !ipv4?
372
- raise InvalidAddressError, "not an IPv4 address: #{@addr}"
387
+ raise InvalidAddressError, "not an IPv4 address: #{to_s}"
373
388
  end
374
- return self.clone.set(@addr, Socket::AF_INET6)
389
+ clone = self.clone.set(@addr, Socket::AF_INET6)
390
+ clone.instance_variable_set(:@mask_addr, @mask_addr | 0xffffffffffffffffffffffff00000000)
391
+ clone
375
392
  end
376
393
 
377
394
  # Returns a new ipaddr built by converting the IPv6 address into a
@@ -400,7 +417,7 @@ class IPAddr
400
417
  # Returns a string for DNS reverse lookup compatible with RFC3172.
401
418
  def ip6_arpa
402
419
  if !ipv6?
403
- raise InvalidAddressError, "not an IPv6 address: #{@addr}"
420
+ raise InvalidAddressError, "not an IPv6 address: #{to_s}"
404
421
  end
405
422
  return _reverse + ".ip6.arpa"
406
423
  end
@@ -408,7 +425,7 @@ class IPAddr
408
425
  # Returns a string for DNS reverse lookup compatible with RFC1886.
409
426
  def ip6_int
410
427
  if !ipv6?
411
- raise InvalidAddressError, "not an IPv6 address: #{@addr}"
428
+ raise InvalidAddressError, "not an IPv6 address: #{to_s}"
412
429
  end
413
430
  return _reverse + ".ip6.int"
414
431
  end
@@ -533,6 +550,7 @@ class IPAddr
533
550
  end
534
551
 
535
552
  protected
553
+ # :stopdoc:
536
554
 
537
555
  def begin_addr
538
556
  @addr & @mask_addr
@@ -548,6 +566,7 @@ class IPAddr
548
566
  raise AddressFamilyError, "unsupported address family"
549
567
  end
550
568
  end
569
+ #:startdoc:
551
570
 
552
571
  # Set +@addr+, the internal stored ip address, to given +addr+. The
553
572
  # parameter +addr+ is validated using the first +family+ member,
@@ -689,6 +708,7 @@ class IPAddr
689
708
  end
690
709
  end
691
710
 
711
+ # :stopdoc:
692
712
  def coerce_other(other)
693
713
  case other
694
714
  when IPAddr
@@ -709,8 +729,8 @@ class IPAddr
709
729
  octets = addr.split('.')
710
730
  end
711
731
  octets.inject(0) { |i, s|
712
- (n = s.to_i) < 256 or raise InvalidAddressError, "invalid address: #{@addr}"
713
- (s != '0') && s.start_with?('0') and raise InvalidAddressError, "zero-filled number in IPv4 address is ambiguous: #{@addr}"
732
+ (n = s.to_i) < 256 or raise InvalidAddressError, "invalid address: #{addr}"
733
+ (s != '0') && s.start_with?('0') and raise InvalidAddressError, "zero-filled number in IPv4 address is ambiguous: #{addr}"
714
734
  i << 8 | n
715
735
  }
716
736
  end
@@ -727,19 +747,19 @@ class IPAddr
727
747
  right = ''
728
748
  when RE_IPV6ADDRLIKE_COMPRESSED
729
749
  if $4
730
- left.count(':') <= 6 or raise InvalidAddressError, "invalid address: #{@addr}"
750
+ left.count(':') <= 6 or raise InvalidAddressError, "invalid address: #{left}"
731
751
  addr = in_addr($~[4,4])
732
752
  left = $1
733
753
  right = $3 + '0:0'
734
754
  else
735
755
  left.count(':') <= ($1.empty? || $2.empty? ? 8 : 7) or
736
- raise InvalidAddressError, "invalid address: #{@addr}"
756
+ raise InvalidAddressError, "invalid address: #{left}"
737
757
  left = $1
738
758
  right = $2
739
759
  addr = 0
740
760
  end
741
761
  else
742
- raise InvalidAddressError, "invalid address: #{@addr}"
762
+ raise InvalidAddressError, "invalid address: #{left}"
743
763
  end
744
764
  l = left.split(':')
745
765
  r = right.split(':')
@@ -800,7 +820,7 @@ unless Socket.const_defined? :AF_INET6
800
820
  class << IPSocket
801
821
  private
802
822
 
803
- def valid_v6?(addr)
823
+ def valid_v6?(addr) # :nodoc:
804
824
  case addr
805
825
  when IPAddr::RE_IPV6ADDRLIKE_FULL
806
826
  if $2
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ipaddr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.7
4
+ version: 1.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akinori MUSHA
8
8
  - Hajimu UMEMOTO
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2024-10-19 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: |
15
14
  IPAddr provides a set of methods to manipulate an IP address.
@@ -23,14 +22,12 @@ extra_rdoc_files: []
23
22
  files:
24
23
  - LICENSE.txt
25
24
  - README.md
26
- - ipaddr.gemspec
27
25
  - lib/ipaddr.rb
28
26
  homepage: https://github.com/ruby/ipaddr
29
27
  licenses:
30
28
  - Ruby
31
29
  - BSD-2-Clause
32
30
  metadata: {}
33
- post_install_message:
34
31
  rdoc_options: []
35
32
  require_paths:
36
33
  - lib
@@ -38,15 +35,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
38
35
  requirements:
39
36
  - - ">="
40
37
  - !ruby/object:Gem::Version
41
- version: '2.3'
38
+ version: '2.4'
42
39
  required_rubygems_version: !ruby/object:Gem::Requirement
43
40
  requirements:
44
41
  - - ">="
45
42
  - !ruby/object:Gem::Version
46
43
  version: '0'
47
44
  requirements: []
48
- rubygems_version: 3.5.21
49
- signing_key:
45
+ rubygems_version: 4.0.6
50
46
  specification_version: 4
51
47
  summary: A class to manipulate an IP address in ruby
52
48
  test_files: []
data/ipaddr.gemspec DELETED
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
- # coding: utf-8
3
-
4
- if File.exist?(File.expand_path("ipaddr.gemspec"))
5
- lib = File.expand_path("../lib", __FILE__)
6
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
7
-
8
- file = File.expand_path("ipaddr.rb", lib)
9
- else
10
- # for ruby-core
11
- file = File.expand_path("../ipaddr.rb", __FILE__)
12
- end
13
-
14
- version = File.foreach(file).find do |line|
15
- /^\s*VERSION\s*=\s*["'](.*)["']/ =~ line and break $1
16
- end
17
-
18
- Gem::Specification.new do |spec|
19
- spec.name = "ipaddr"
20
- spec.version = version
21
- spec.authors = ["Akinori MUSHA", "Hajimu UMEMOTO"]
22
- spec.email = ["knu@idaemons.org", "ume@mahoroba.org"]
23
-
24
- spec.summary = %q{A class to manipulate an IP address in ruby}
25
- spec.description = <<-'DESCRIPTION'
26
- IPAddr provides a set of methods to manipulate an IP address.
27
- Both IPv4 and IPv6 are supported.
28
- DESCRIPTION
29
- spec.homepage = "https://github.com/ruby/ipaddr"
30
- spec.licenses = ["Ruby", "BSD-2-Clause"]
31
-
32
- spec.files = ["LICENSE.txt", "README.md", "ipaddr.gemspec", "lib/ipaddr.rb"]
33
- spec.require_paths = ["lib"]
34
-
35
- spec.required_ruby_version = ">= 2.3"
36
- end