Sha256: 50e6c852ab002b13fec61e1697f57e6704f93ff944b31fd2f40492369ccbfb0b

Contents?: true

Size: 1.45 KB

Versions: 2

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

module JDX
  module Geocoder
    class IpApi
      include Base

      def initialize(term)
        @term = term
      end

      def city
        data['city']
      end

      def country
        data['country']
      end

      def country_code
        data['countryCode']
      end

      def address
        "#{city}, #{state_code} #{postal_code}, #{country}".sub(/^[ ,]*/, '')
      end

      def state
        data['regionName']
      end

      def state_code
        data['region']
      end

      def latitude
        data['lat']
      end

      def longitude
        data['lon']
      end

      def postal_code
        data['zip']
      end

      # coordinate order is longitude, latitude
      def coordinates
        [longitude, latitude]
      end

      private

      def url
        "https://pro.ip-api.com/json/#{escape_term}?key=#{ipapi_key}"
      end

      def serialize_data(response_data)
        response_data
      end

      def handle_response
        response = typhoeus_get
        if response.success?
          data = parse_json(response.body)
          return [true, data] if data['status'] == 'success'

          blacklist_term
        else
          handle_request_error(response)
        end
        false
      end

      def cache_redis
        @cache_redis ||= Geocoder.configuration.ip_cache_db
      end

      def ipapi_key
        @ipapi_key ||= Geocoder.configuration.ipapi_key
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jdx-geocoder-0.1.1 lib/jdx/geocoder/ip_api.rb
jdx-geocoder-0.1.0 lib/jdx/geocoder/ip_api.rb