better_ipaddr 0.3.1 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6da20bca129dcd3612daf2fab3514185f4afe3a5
4
- data.tar.gz: 648d2d1ddbc3f441ce9a2e1c8819105e9fd902d7
3
+ metadata.gz: 7331f1ceb9efec5d87562f785d12963e96239579
4
+ data.tar.gz: 821dd58b4ef97f9348d82e488ae10db4a93c31db
5
5
  SHA512:
6
- metadata.gz: 3b02d16f6d4b03f3ab668f13cab5a3f9ad983a28a8535d8643a9f0cbf1234930ec2358ef1a814622937ad53e31d64aeea6519643eb593913c2875d9505c7bd95
7
- data.tar.gz: 95770066db8bc6725faa929c9274ac620aaa3bd83d7f08307b578f9446bfdb133a5b065aae9e281e6b01f18483fb1f374c7b2bcac7d4ba09834eb1113235141c
6
+ metadata.gz: b35e338ab45746641792dd3a94b507b8b8581cafa4ce0225dbafd804fe01e382415081c8391fad1db585042b442bc4c56c2ddea66023f6cbe2c01673e144b2c2
7
+ data.tar.gz: 5d29730ae82e1d9e21259d15ea2732e01198cd603a3a9a6db321d813486c0a4e50c0b44a2f2f81f8da0f722f4052ed762f1deeec51811f69c885fdc9b09ee6eb
@@ -1,5 +1,6 @@
1
1
  require "better_ipaddr/constants"
2
2
  require "better_ipaddr/methods"
3
+ require "better_ipaddr/host_methods"
3
4
 
4
5
  class IPAddr
5
6
  class Base < IPAddr
@@ -53,6 +54,21 @@ class IPAddr
53
54
  end
54
55
  end
55
56
 
57
+ # Create an IPAddr host subclass from the given object, guessing the type of
58
+ # address given based on its type and content.
59
+ #
60
+ # Uses .from internally, so the same concerns apply, though the returned
61
+ # object is guaranteed to be of a Host class or nil.
62
+
63
+ def self.host_from(address)
64
+ ip = from(address)
65
+ if ip.ipv4?
66
+ V4::Host[ip]
67
+ elsif ip.ipv6?
68
+ V6::Host[ip]
69
+ end
70
+ end
71
+
56
72
  # Create an IPAddr from an Integer.
57
73
  #
58
74
  # @param address [Integer]
@@ -193,6 +209,8 @@ class IPAddr
193
209
  const_set(:PREFIX_LENGTH_TO_NETMASK,
194
210
  PREFIX_LENGTH_TO_NETMASK.fetch(self::FAMILY))
195
211
  const_set(:MAX_INT, 2**self::BIT_LENGTH - 1)
212
+ const_set(:HOST_NETMASK,
213
+ self::PREFIX_LENGTH_TO_NETMASK.fetch(self::BIT_LENGTH))
196
214
  end
197
215
 
198
216
  def address_family_bit_length
@@ -212,12 +230,20 @@ class IPAddr
212
230
  specialize_constants Family::IPV4
213
231
 
214
232
  REGEX = Regex::IPV4
233
+
234
+ class Host < V4
235
+ include BetterIpaddr::HostMethods
236
+ end
215
237
  end
216
238
 
217
239
  class V6 < Base
218
240
  specialize_constants Family::IPV6
219
241
 
220
242
  REGEX = Regex::IPV6
243
+
244
+ class Host < V6
245
+ include BetterIpaddr::HostMethods
246
+ end
221
247
  end
222
248
 
223
249
  class MAC < Base
@@ -47,6 +47,7 @@ module BetterIpaddr
47
47
  /#{LEADING_QUAD}{7,7}#{QUAD}/,
48
48
 
49
49
  # zero-compressed
50
+ /::/,
50
51
  /#{LEADING_QUAD}{1,7}:/,
51
52
  /:#{TRAILING_QUAD}{1,7}/,
52
53
  /#{LEADING_QUAD}{1,6}#{TRAILING_QUAD}{1,1}/,
@@ -0,0 +1,66 @@
1
+ module BetterIpaddr
2
+ module HostMethods
3
+ def initialize(*)
4
+ super
5
+ @mask_addr = netmask.to_i
6
+ end
7
+
8
+ # Returns true if the argument is the same as the receiver, false otherwise.
9
+
10
+ def cover?(other)
11
+ self == other
12
+ end
13
+
14
+ # @overload each
15
+ # Yield the object. Returns the object.
16
+ # @yield [IPAddr]
17
+ # @return [IPAddr]
18
+
19
+ # @overload each
20
+ # Return an enumerator with the behavior described above.
21
+ # @return [Enumerator]
22
+
23
+ def each
24
+ if block_given?
25
+ yield self
26
+ else
27
+ enum_for(:each)
28
+ end
29
+ end
30
+
31
+ # Returns the object.
32
+ # @return [IPAddr]
33
+
34
+ def first
35
+ self
36
+ end
37
+
38
+ # Returns true.
39
+
40
+ def host?
41
+ true
42
+ end
43
+
44
+ # Returns the object.
45
+ # @return [IPAddr]
46
+
47
+ def last
48
+ self
49
+ end
50
+
51
+ # Returns the netmask for a host address.
52
+ def netmask
53
+ self.class::HOST_NETMASK
54
+ end
55
+
56
+ # Returns the number of bits in the address.
57
+ def prefix_length
58
+ self.class::BIT_LENGTH
59
+ end
60
+
61
+ # Returns 1.
62
+ def size
63
+ 1
64
+ end
65
+ end
66
+ end
@@ -5,3 +5,9 @@ module Kernel
5
5
  IPAddr::Base.from(object)
6
6
  end
7
7
  end
8
+
9
+ class IPAddr
10
+ def self.Host(object)
11
+ Base.host_from(object)
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module BetterIpaddr
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_ipaddr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Miller
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-25 00:00:00.000000000 Z
11
+ date: 2016-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,6 +73,7 @@ files:
73
73
  - lib/better_ipaddr/classes.rb
74
74
  - lib/better_ipaddr/constants.rb
75
75
  - lib/better_ipaddr/core_extension.rb
76
+ - lib/better_ipaddr/host_methods.rb
76
77
  - lib/better_ipaddr/kernel_method.rb
77
78
  - lib/better_ipaddr/methods.rb
78
79
  - lib/better_ipaddr/space.rb
@@ -97,8 +98,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
98
  version: '0'
98
99
  requirements: []
99
100
  rubyforge_project:
100
- rubygems_version: 2.5.2
101
+ rubygems_version: 2.5.1
101
102
  signing_key:
102
103
  specification_version: 4
103
104
  summary: IPAddr enhancements for network management.
104
105
  test_files: []
106
+ has_rdoc: