class Kokki::IPAddress

Constants

PRIVATE_IPS

Attributes

address[R]

Public Class Methods

new(address) click to toggle source
# File lib/kokki/ip_address.rb, line 11
def initialize(address)
  @address = address

  raise InvalidInputError, "Invalid input: #{address}" if !valid_format? || internal?
end

Public Instance Methods

country_code() click to toggle source
# File lib/kokki/ip_address.rb, line 17
def country_code
  @country_code ||=
    [].tap do |out|
      begin
        res = IPInfo.geo(address)
        out << res.dig("country")
      rescue Error => _e
        out << nil
      end
    end.first
end
internal?() click to toggle source
# File lib/kokki/ip_address.rb, line 29
def internal?
  loopback? || private?
end
loopback?() click to toggle source
# File lib/kokki/ip_address.rb, line 33
def loopback?
  address == "0.0.0.0" || address.start_with?("127") || address == "::1"
end
private?() click to toggle source
# File lib/kokki/ip_address.rb, line 37
def private?
  PRIVATE_IPS.any? { |ip| ip.include?(address) }
end

Private Instance Methods

valid_format?() click to toggle source
# File lib/kokki/ip_address.rb, line 43
def valid_format?
  IPAddr.new(address)
  true
rescue IPAddr::InvalidAddressError => _e
  false
end