better_ipaddr 0.5.0 → 0.6.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
- SHA1:
3
- metadata.gz: 871dfdaf9d8e064ae09988a53d3e991544d414a9
4
- data.tar.gz: 3d3229104847532b1713497982473e6f08520ee1
2
+ SHA256:
3
+ metadata.gz: 5cd953909cfae8bb5422a297acdd4592ec96957c262072587add707a78ca9dd3
4
+ data.tar.gz: 32ff0ee9fb1aa6fc91a1fd2db3802add0d9b10af29c97ecbb066b3805ca5dcf3
5
5
  SHA512:
6
- metadata.gz: d24bedd14d52e7f729af783387d2fe956b9ad4da55bbbfc624ec041046da05854dfcb573b855d131bc727aaa5f74cf879ff3dee01b592b635403c7ce60c5c4a3
7
- data.tar.gz: 90bcb07ddb3ee7899fa8d8c53d193806004c016e4bf9cc21a1ed3160155edc944f420be46284e4a441cfbc361477a3fe9c447fa751b1ecd24dbcc5aab293b7f9
6
+ metadata.gz: 4ac0277a9876f20973dd0418547093ec41342ecbd1186c2da235c2463a0cd70f9cf39c623242ebad8cb2aa2156528a1d9735317c82a04310385ae93624beec75
7
+ data.tar.gz: 2d8f9e58dc03ea59d6af81995345e37395fd259bb1a615ef6ad9cd0d6e19a5b9cfb5f1ef3cc2891574861e99ae9280ee72288ed5d29308483b4d909041f7dba1
@@ -0,0 +1,60 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'spec/extra/**/*'
4
+
5
+ Layout/EmptyLinesAroundArguments:
6
+ Enabled: false
7
+
8
+ Lint/UnusedMethodArgument:
9
+ AllowUnusedKeywordArguments: true
10
+
11
+ Metrics/AbcSize:
12
+ Max: 20
13
+
14
+ Metrics/BlockLength:
15
+ Exclude:
16
+ - 'spec/**/*'
17
+
18
+ Metrics/ClassLength:
19
+ Exclude:
20
+ - 'lib/better_ipaddr/classes.rb'
21
+ - 'lib/better_ipaddr/space.rb'
22
+
23
+ Metrics/MethodLength:
24
+ Max: 15
25
+
26
+ Metrics/ModuleLength:
27
+ Exclude:
28
+ - 'lib/better_ipaddr/methods.rb'
29
+
30
+ Naming/BinaryOperatorParameterName:
31
+ Enabled: false
32
+
33
+ Naming/MethodName:
34
+ Exclude:
35
+ - 'lib/better_ipaddr/kernel_method.rb'
36
+
37
+ Style/Alias:
38
+ EnforcedStyle: prefer_alias_method
39
+
40
+ Style/CommentedKeyword:
41
+ Enabled: false
42
+
43
+ Style/Documentation:
44
+ Exclude:
45
+ - 'lib/better_ipaddr/core_extension.rb'
46
+ - 'lib/better_ipaddr/kernel_method.rb'
47
+ - 'spec/**/*'
48
+
49
+ Style/MutableConstant:
50
+ Exclude:
51
+ - 'lib/better_ipaddr/constants.rb'
52
+
53
+ Style/NumericPredicate:
54
+ EnforcedStyle: comparison
55
+
56
+ Style/StringLiterals:
57
+ Enabled: false
58
+
59
+ Style/YodaCondition:
60
+ Enabled: false
@@ -1,9 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
- - 2.1.8
5
- - 2.2.4
6
- - 2.3.0
4
+ - 2.1.10
5
+ - 2.2.10
6
+ - 2.3.7
7
+ - 2.4.4
8
+ - 2.5.1
9
+ - jruby-9.1.16.0
7
10
  matrix:
8
11
  include:
9
12
  - rvm: jruby
data/README.md CHANGED
@@ -10,6 +10,8 @@ require "better_ipaddr"
10
10
  addr = IPAddr::V4[some_source] # shortcut for .new, because your test suite
11
11
  # contains a zillion IP addresses and you're
12
12
  # tired of typing Socket::AF_INET
13
+ addr.inspect #
14
+ #=> "IPAddr::V4['1.2.3.0/24']" # inspect emits readable, copy-pastable ruby code
13
15
  addr.host? # is it a host address?
14
16
  addr.network? # or a network address?
15
17
  addr.cidr # what is the CIDR representation?
@@ -77,6 +79,16 @@ class_c = addr << 8 # => IPAddr::V4["1.0.0.0/24"]
77
79
  IPAddr.new("1.0.0.0/24").summarize_with(IPAddr["1.0.1.0/24"]) # => IPAddr::V4["1.0.0.0/23"]
78
80
  ```
79
81
 
82
+ This approach introduces at least one incompatibility: addresses that differ
83
+ only in their netmask are considered equal in ipaddr, but not in better_ipaddr:
84
+
85
+ ```ruby
86
+ require 'ipaddr'
87
+ IPAddr.new('1.0.0.0/32') == IPAddr.new('1.0.0.0/8') # => true
88
+ require 'better_ipaddr/core_extension'
89
+ IPAddr.new('1.0.0.0/32') == IPAddr.new('1.0.0.0/8') # => false
90
+ ```
91
+
80
92
  The recommended way is to `require "better_ipaddr"` and use
81
93
  the `IPAddr` subclasses explicitly.
82
94
 
data/Rakefile CHANGED
@@ -7,4 +7,9 @@ Rake::TestTask.new(:spec) do |t|
7
7
  t.test_files = FileList["spec/**/*_spec.rb"]
8
8
  end
9
9
 
10
- task default: :spec
10
+ Rake::TestTask.new(:spec_ipaddr) do |t|
11
+ t.libs << "lib"
12
+ t.test_files = FileList["spec/extra/**/test_ipaddr.rb"]
13
+ end
14
+
15
+ task default: %i[spec spec_ipaddr]
@@ -1,5 +1,4 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'better_ipaddr/version'
5
4
 
@@ -13,13 +12,18 @@ Gem::Specification.new do |spec|
13
12
  spec.homepage = "https://github.com/bjmllr/better_ipaddr"
14
13
  spec.license = "GPL-3.0"
15
14
 
16
- spec.files = `git ls-files -z`.split("\x0")
15
+ spec.files = `git ls-files -z`
16
+ .split("\x0")
17
17
  .reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+
18
19
  spec.bindir = "exe"
19
- spec.executables = spec.files.grep(%r(^exe/)) { |f| File.basename(f) }
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
21
  spec.require_paths = ["lib"]
21
22
 
22
23
  spec.add_development_dependency "bundler", "~> 1.0"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "ipaddr", ">= 1.2.0"
24
25
  spec.add_development_dependency "minitest", "~> 5.0"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rubocop", "~> 0.54" if RUBY_VERSION > '2.1'
28
+ spec.add_development_dependency "test-unit"
25
29
  end
@@ -3,6 +3,7 @@ require "better_ipaddr/methods"
3
3
  require "better_ipaddr/host_methods"
4
4
 
5
5
  class IPAddr
6
+ # An intermediate superclass for all BetterIpaddr classes
6
7
  class Base < IPAddr
7
8
  include BetterIpaddr::Constants
8
9
  include BetterIpaddr::InstanceMethods
@@ -17,8 +18,9 @@ class IPAddr
17
18
  # @param address [Integer, IPAddr, String]
18
19
  # @param mask [Integer, IPAddr, String, Nil]
19
20
  # @param family [Integer]
21
+ # @param classful [Boolean] see Base.from_string
20
22
  # @return [IPAddr, Nil]
21
- def self.[](address, mask = nil, family: self::FAMILY)
23
+ def self.[](address, mask = nil, family: self::FAMILY, classful: false)
22
24
  prefix_length = mask && object_to_prefix_length(mask, family)
23
25
 
24
26
  case address
@@ -27,7 +29,7 @@ class IPAddr
27
29
  when IPAddr
28
30
  from_ipaddr(address, prefix_length, family: family)
29
31
  when String
30
- from_string(address, prefix_length, family: family)
32
+ from_string(address, prefix_length, family: family, classful: classful)
31
33
  end
32
34
  end
33
35
 
@@ -42,16 +44,24 @@ class IPAddr
42
44
  # content.
43
45
  #
44
46
  # @param address [Integer, IPAddr, String]
47
+ # @param exception [Boolean] If true, then when the given object can't be
48
+ # converted to an IPAddr, a TypeError will be raise rather than returning
49
+ # nil.
50
+ # @param classful [Boolean] see Base.from_string
45
51
  # @return [IPAddr, Nil]
46
- def self.from(address)
52
+ def self.from(address, exception: false, classful: false)
47
53
  case address
48
54
  when IPAddr
49
55
  specialize address
50
56
  when Regex::IPV4, 0..V4::MAX_INT
51
- V4[address]
57
+ V4[address, classful: classful]
52
58
  when Regex::IPV6, 0..V6::MAX_INT
53
59
  V6[address]
54
- end
60
+ end || (
61
+ if exception
62
+ raise TypeError, "can't convert #{address.inspect} to #{self}"
63
+ end
64
+ )
55
65
  end
56
66
 
57
67
  # Create an IPAddr host subclass from the given object, guessing the type of
@@ -59,12 +69,16 @@ class IPAddr
59
69
  #
60
70
  # Uses .from internally, so the same concerns apply, though the returned
61
71
  # object is guaranteed to be of a Host class or nil.
72
+ #
73
+ # @param address [Integer, IPAddr, String]
74
+ # @param exception [Boolean] See IPAddr::Base.from
75
+ # @return [IPAddr::Host, Nil]
62
76
 
63
- def self.host_from(address)
64
- ip = from(address)
65
- if ip.ipv4?
77
+ def self.host_from(address, exception: false)
78
+ ip = from(address, exception: exception)
79
+ if ip && ip.ipv4?
66
80
  V4::Host[ip]
67
- elsif ip.ipv6?
81
+ elsif ip && ip.ipv6?
68
82
  V6::Host[ip]
69
83
  end
70
84
  end
@@ -95,12 +109,26 @@ class IPAddr
95
109
  # @param address [String]
96
110
  # @param mask [Integer, String] a netmask or prefix length
97
111
  # @param family [Integer, Nil]
112
+ # @param classful [Boolean] controls the conversion of IPv4 addresses
113
+ # without a prefix length in CIDR notation. When false, these are assumed
114
+ # to be host networks (/32). When true, these are assumed to be classful
115
+ # (rfc791) networks, with an implicit prefix length. Has no effect on IPv6
116
+ # addresses.
98
117
  # @return [IPAddr]
99
- def self.from_string(address, mask = nil, family: self::FAMILY)
118
+ def self.from_string(
119
+ address,
120
+ mask = nil,
121
+ family: self::FAMILY,
122
+ classful: false
123
+ )
100
124
  if mask
101
125
  new(address, family).mask(mask)
102
- else
126
+ elsif !classful || address.include?('/')
103
127
  new(address, family)
128
+ else
129
+ ipaddr = new(address, family)
130
+ return ipaddr unless ipaddr.ipv4?
131
+ ipaddr.classful || ipaddr
104
132
  end
105
133
  end
106
134
 
@@ -230,26 +258,65 @@ class IPAddr
230
258
  end
231
259
  end
232
260
 
261
+ # An IPv4 address, 32 bits
233
262
  class V4 < Base
234
263
  specialize_constants Family::IPV4
235
264
 
236
265
  REGEX = Regex::IPV4
237
266
 
267
+ NETWORK_CLASSES = {
268
+ new('0.0.0.0/1') => 8, # A
269
+ new('128.0.0.0/2') => 16, # B
270
+ new('192.0.0.0/3') => 24 # C
271
+ }.freeze
272
+
273
+ # If the address falls in one of the address classes defined in rfc791,
274
+ # return a new IPAddr with the appropriate prefix length, otherwise return
275
+ # nil.
276
+ #
277
+ # * Class A: networks of 16,777,216 addresses each,
278
+ # from 0.0.0.0/8 to 127.0.0.0/8
279
+ # * Class B: networks of 65,537 addresses each,
280
+ # from 128.0.0.0/16 to 191.255.0.0/16
281
+ # * Class C: networks of 256 addresses each,
282
+ # from 192.0.0.0/24 to 223.255.255.0/24
283
+ #
284
+ # @return [IPAddr::V4, nil]
285
+ def classful
286
+ prefix_length = classful_prefix_length || return
287
+ mask(prefix_length)
288
+ end
289
+
290
+ # If the address falls in one of the address classes defined in rfc791,
291
+ # return the corresponding prefix length, otherwise return nil.
292
+ #
293
+ # @return [Integer, nil]
294
+ def classful_prefix_length
295
+ key = NETWORK_CLASSES.keys.find do |block|
296
+ block.to_range(&:to_i).cover?(to_i)
297
+ end
298
+ NETWORK_CLASSES[key]
299
+ end
300
+
301
+ # An IPv4 host address, 32 bits
238
302
  class Host < V4
239
303
  include BetterIpaddr::HostMethods
240
304
  end
241
305
  end
242
306
 
307
+ # An IPv6 address, 128 bits
243
308
  class V6 < Base
244
309
  specialize_constants Family::IPV6
245
310
 
246
311
  REGEX = Regex::IPV6
247
312
 
313
+ # An IPv6 host address, 128 bits
248
314
  class Host < V6
249
315
  include BetterIpaddr::HostMethods
250
316
  end
251
317
  end
252
318
 
319
+ # A MAC address, 48 bits
253
320
  class MAC < Base
254
321
  specialize_constants Family::EUI48
255
322
  end
@@ -1,6 +1,7 @@
1
1
  require "socket"
2
2
 
3
3
  module BetterIpaddr
4
+ # Namespace for constants used by BetterIpaddr
4
5
  module Constants
5
6
  # Integer codes representing supported address clases.
6
7
  # Reuse values from Socket namespace where possible.
@@ -28,7 +29,7 @@ module BetterIpaddr
28
29
  /[0-9]/
29
30
  )
30
31
 
31
- IPV4 = /\A#{OCTET}#{TRAILING_OCTET}{3}(?:\/#{IPV4_PL})?\z/
32
+ IPV4 = %r{\A#{OCTET}#{TRAILING_OCTET}{3}(?:\/#{IPV4_PL})?\z}
32
33
 
33
34
  # IPv6 regex adapted from http://stackoverflow.com/a/17871737
34
35
  QUAD = /[0-9a-zA-Z]{1,4}/
@@ -64,7 +65,7 @@ module BetterIpaddr
64
65
  /#{LEADING_QUAD}{1,4}:#{IPV4}/
65
66
  )
66
67
 
67
- IPV6 = /\A#{IPV6_ADDRESS}(?:\/#{IPV6_PL})?\z/
68
+ IPV6 = %r{\A#{IPV6_ADDRESS}(?:\/#{IPV6_PL})?\z}
68
69
  end
69
70
 
70
71
  # Map well known address family names to constants.
@@ -74,7 +75,7 @@ module BetterIpaddr
74
75
  eui48: Family::EUI48,
75
76
  eui64: Family::EUI64,
76
77
  mac: Family::EUI48
77
- }
78
+ }.freeze
78
79
 
79
80
  # Map each address family to the size of its address space, in bits.
80
81
  FAMILY_TO_BIT_LENGTH = {
@@ -82,7 +83,7 @@ module BetterIpaddr
82
83
  Family::IPV6 => 128,
83
84
  Family::EUI48 => 48,
84
85
  Family::EUI64 => 64
85
- }
86
+ }.freeze
86
87
 
87
88
  # Map all possible prefix lengths to the corresponding netmasks.
88
89
  PREFIX_LENGTH_TO_NETMASK = {}
@@ -93,6 +94,7 @@ module BetterIpaddr
93
94
  end
94
95
  PREFIX_LENGTH_TO_NETMASK[family] = netmasks
95
96
  end
97
+ PREFIX_LENGTH_TO_NETMASK.freeze
96
98
 
97
99
  # Map all possible netmasks to the corresponding prefix lengths.
98
100
  NETMASK_TO_PREFIX_LENGTH = {}
@@ -100,5 +102,6 @@ module BetterIpaddr
100
102
  NETMASK_TO_PREFIX_LENGTH[family] =
101
103
  Hash[hash.map.with_index { |e, i| [e, i] }]
102
104
  end
105
+ NETMASK_TO_PREFIX_LENGTH.freeze
103
106
  end
104
107
  end
@@ -4,7 +4,6 @@ require "better_ipaddr/classes"
4
4
 
5
5
  class IPAddr
6
6
  include BetterIpaddr::Constants
7
- extend BetterIpaddr::ClassMethods
8
7
  prepend BetterIpaddr::InstanceMethods
9
8
  include Comparable
10
9
  include Enumerable
@@ -1,4 +1,5 @@
1
1
  module BetterIpaddr
2
+ # Methods included in IPAddr::IPV4::Host and IPAddr::IPV6::Host
2
3
  module HostMethods
3
4
  def initialize(*)
4
5
  super
@@ -1,13 +1,38 @@
1
1
  require "better_ipaddr/classes"
2
2
 
3
3
  module Kernel
4
- def IPAddr(object)
5
- IPAddr::Base.from(object)
4
+ # @see IPAddr::Base.from
5
+ def IPAddr(object, exception: false, classful: false)
6
+ IPAddr::Base.from(object, exception: exception, classful: classful)
6
7
  end
7
8
  end
8
9
 
9
10
  class IPAddr
10
- def self.Host(object)
11
- Base.host_from(object)
11
+ # @see IPAddr::Base.host_from
12
+ def self.Host(object, exception: false)
13
+ Base.host_from(object, exception: exception)
14
+ end
15
+ end
16
+
17
+ module BetterIpaddr
18
+ module InstanceMethods
19
+ # Emits a snippet of ruby code that can be copied and pasted. Uses the
20
+ # string representation of the address, by default in CIDR notation, instead
21
+ # of the harder-to-read mask notation.
22
+ #
23
+ # @return String
24
+ def inspect(cidr: true, full: false)
25
+ "#{self.class}['#{better_to_s(cidr: cidr, full: full)}']"
26
+ end
27
+ end
28
+
29
+ module HostMethods
30
+ # Same as BetterIpaddr::InstanceMethods#inspect but doesn't by default
31
+ # include the CIDR prefix length.
32
+ #
33
+ # @return String
34
+ def inspect(cidr: false, full: false)
35
+ "#{self.class}['#{better_to_s(cidr: cidr, full: full)}']"
36
+ end
12
37
  end
13
38
  end
@@ -2,46 +2,7 @@ require "ipaddr"
2
2
  require "better_ipaddr/constants"
3
3
 
4
4
  module BetterIpaddr
5
- module ClassMethods
6
- include Constants
7
-
8
- # @overload [](address, family)
9
- # @param address [Integer] the integer representation of the address
10
- # @param family [Symbol] a symbol named for the address's
11
- # address family, one of +:ipv4+, +:ipv6+, or +:mac+.
12
- # @return [IPAddr]
13
- # Wrapper for IPAddr.new that accepts a symbolic family name and
14
- # returns a specialized IPAddr subclass.
15
- #
16
- # @overload [](address, family)
17
- # @param address [Integer] the integer representation of the address
18
- # @param family [Integer] the magic number representing the address's
19
- # address family.
20
- # @return [IPAddr]
21
- # Wrapper for IPAddr.new that accepts a symbolic family name and
22
- # returns a specialized IPAddr subclass.
23
- #
24
- # @overload [](address)
25
- # @param address [String] the string representation of the address
26
- # @return [IPAddr]
27
- # Wrapper for IPAddr.new that accepts the string representation
28
- # of an address returns a specialized IPAddr subclass.
29
-
30
- def [](address, family = nil)
31
- instance = case family
32
- when Symbol
33
- self[address, SYMBOL_TO_FAMILY.fetch(family)]
34
- when IPAddr
35
- address
36
- when nil
37
- new(address)
38
- else
39
- new(address, family)
40
- end
41
- IPAddr::Base.specialize(instance)
42
- end
43
- end
44
-
5
+ # Methods included in IPAddr::Base and its descendants
45
6
  module InstanceMethods
46
7
  include Constants
47
8
 
@@ -85,7 +46,7 @@ module BetterIpaddr
85
46
  # @return [IPAddr]
86
47
 
87
48
  def -(offset)
88
- self + (-offset)
49
+ self + -offset
89
50
  end
90
51
 
91
52
  # @overload <=>(other)
@@ -105,7 +66,7 @@ module BetterIpaddr
105
66
  family_difference = family <=> other.family
106
67
  return family_difference unless family_difference == 0
107
68
  elsif !other.is_a?(Integer)
108
- fail ArgumentError, "Can't compare #{self.class} with #{other.class}"
69
+ return nil
109
70
  end
110
71
 
111
72
  address_difference = to_i <=> other.to_i
@@ -137,7 +98,7 @@ module BetterIpaddr
137
98
  # @return [IPAddr] the address at the given index
138
99
 
139
100
  def [](offset)
140
- return self if offset.zero? && host?
101
+ return self if offset == 0 && host?
141
102
  offset2 = offset >= 0 ? offset : size + offset
142
103
  self.class[to_i + offset2, family: family]
143
104
  end
@@ -256,6 +217,7 @@ module BetterIpaddr
256
217
  NETMASK_TO_PREFIX_LENGTH[family][mask_addr]
257
218
  end
258
219
 
220
+ alias_method :prefix, :prefix_length unless 1.respond_to?(:positive?)
259
221
  alias_method :prefixlen, :prefix_length
260
222
 
261
223
  # Return a new address with the prefix length increased by the
@@ -2,6 +2,7 @@ require "ipaddr"
2
2
  require "better_ipaddr/classes"
3
3
 
4
4
  module BetterIpaddr
5
+ # Address space utilities
5
6
  class Space
6
7
  include Enumerable
7
8
 
@@ -14,8 +15,8 @@ module BetterIpaddr
14
15
  @space = space
15
16
  outlier = @networks.find { |net| !@space.cover?(net) }
16
17
  return unless outlier
17
- fail ArgumentError, "Address space #{@space.inspect} does not cover "\
18
- "network #{outlier.inspect}"
18
+ raise ArgumentError, "Address space #{@space.inspect} does not cover "\
19
+ "network #{outlier.inspect}"
19
20
  end
20
21
 
21
22
  def +(other)
@@ -96,7 +97,7 @@ module BetterIpaddr
96
97
  def infer_address_family(*networks)
97
98
  example = networks.find { |net| net.respond_to?(:family) }
98
99
  return example.family if example
99
- fail "Unable to infer address family"
100
+ raise "Unable to infer address family"
100
101
  end
101
102
 
102
103
  def export(new_networks, space: nil)
@@ -1,3 +1,3 @@
1
1
  module BetterIpaddr
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0".freeze
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.5.0
4
+ version: 0.6.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-12-09 00:00:00.000000000 Z
11
+ date: 2018-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ipaddr
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rake
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -39,19 +67,33 @@ dependencies:
39
67
  - !ruby/object:Gem::Version
40
68
  version: '10.0'
41
69
  - !ruby/object:Gem::Dependency
42
- name: minitest
70
+ name: rubocop
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: '5.0'
75
+ version: '0.54'
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: '5.0'
82
+ version: '0.54'
83
+ - !ruby/object:Gem::Dependency
84
+ name: test-unit
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
55
97
  description:
56
98
  email:
57
99
  - bmiller@rackspace.com
@@ -60,6 +102,7 @@ extensions: []
60
102
  extra_rdoc_files: []
61
103
  files:
62
104
  - ".gitignore"
105
+ - ".rubocop.yml"
63
106
  - ".travis.yml"
64
107
  - CODE_OF_CONDUCT.md
65
108
  - Gemfile
@@ -98,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
141
  version: '0'
99
142
  requirements: []
100
143
  rubyforge_project:
101
- rubygems_version: 2.5.1
144
+ rubygems_version: 2.7.3
102
145
  signing_key:
103
146
  specification_version: 4
104
147
  summary: IPAddr enhancements for network management.