Class: IPLookup

Inherits:
Object
  • Object
show all
Defined in:
lib/ip_lookup.rb,
lib/ip_lookup/db.rb,
lib/ip_lookup/errors.rb,
lib/ip_lookup/version.rb,
lib/ip_lookup/defaults.rb

Defined Under Namespace

Classes: DB, DBFileNotFoundError

Constant Summary collapse

VERSION =
"1.2.3"
DEFAULT_COUNTRY =
"us"
DEFAULT_TIMEZONE =
"America/Swift_Current"
DEFAULT_COORDINATES =

NYC

[40.0, 74.0].freeze
DEFAULT_SUBDIVISION =
nil

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ip_address, silent_exceptions: false) ⇒ IPLookup

Returns a new instance of IPLookup.



14
15
16
17
18
19
# File 'lib/ip_lookup.rb', line 14

def initialize(ip_address, silent_exceptions: false)
  @silent_exceptions = silent_exceptions
  @result = DB.new(silent_exceptions).lookup(ip_address)
rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError => e
  raise e unless silent_exceptions
end

Instance Attribute Details

#resultObject (readonly)

Returns the value of attribute result.



11
12
13
# File 'lib/ip_lookup.rb', line 11

def result
  @result
end

#silent_exceptionsObject (readonly)

Returns the value of attribute silent_exceptions.



12
13
14
# File 'lib/ip_lookup.rb', line 12

def silent_exceptions
  @silent_exceptions
end

Instance Method Details

#coordinatesObject



37
38
39
40
41
# File 'lib/ip_lookup.rb', line 37

def coordinates
  return DEFAULT_COORDINATES unless result&.found?

  [result.location.latitude, result.location.longitude]
end

#countryObject



21
22
23
24
25
26
# File 'lib/ip_lookup.rb', line 21

def country
  return DEFAULT_COUNTRY unless result&.found?

  iso_code = result.country.iso_code || result.registered_country.iso_code
  iso_code ? iso_code.downcase : DEFAULT_COUNTRY
end

#subdivisionObject



43
44
45
46
47
# File 'lib/ip_lookup.rb', line 43

def subdivision
  return DEFAULT_SUBDIVISION unless result&.found?

  result.subdivisions.any? ? result.subdivisions.first.iso_code.downcase : DEFAULT_SUBDIVISION
end

#timezoneObject



28
29
30
31
32
33
34
35
# File 'lib/ip_lookup.rb', line 28

def timezone
  return DEFAULT_TIMEZONE unless result&.found?

  timezone = result.location.time_zone

  timezone ||= timezone_for result.country.iso_code if result.country.iso_code
  timezone || DEFAULT_TIMEZONE
end