Sha256: 73f94db2f2fee4039a208740e323c4f51c75cd18ffe7302b07a08ede08a16ed0

Contents?: true

Size: 788 Bytes

Versions: 3

Compression:

Stored size: 788 Bytes

Contents

# frozen_string_literal: true

require 'ipaddr'

# monkey-patch IPAddr class to provide some cidr-related accessors
class IPAddr
  def cidr?
    full_mask = case @family
                when Socket::AF_INET then IN4MASK
                when Socket::AF_INET6 then IN6MASK
                end
    raise AddressFamilyError, 'unsupported address family' unless full_mask
    @mask_addr != full_mask
  end

  def mask_bits
    @mask_addr.to_s(2).sub(/0+$/, '').length
  end

  def canonical
    to_s + (cidr? ? "/#{mask_bits}" : '')
  end

  PRIVATE_IP_RANGES = [
    IPAddr.new('10.0.0.0/8'),
    IPAddr.new('172.16.0.0/12'),
    IPAddr.new('192.168.0.0/16'),
    IPAddr.new('fc00::/7')
  ].freeze

  def private?
    @private ||= PRIVATE_IP_RANGES.any? { |rng| rng.include? self }
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
svcbase-0.1.18 lib/svcbase/ipaddr_helper.rb
svcbase-0.1.17 lib/svcbase/ipaddr_helper.rb
svcbase-0.1.16 lib/svcbase/ipaddr_helper.rb