module JDX::Geocoder::Base

Attributes

data[R]

Public Instance Methods

Private Instance Methods

blacklist_term() click to toggle source
# File lib/jdx/geocoder/base.rb, line 74
def blacklist_term
  cache_redis.set(bterm, '', ex: 3600, nx: true)
end
bterm() click to toggle source
# File lib/jdx/geocoder/base.rb, line 94
def bterm
  "b:#{@term}"
end
cache_data(serialized_data) click to toggle source
# File lib/jdx/geocoder/base.rb, line 78
def cache_data(serialized_data)
  cache_redis.set(wterm, JSON.dump(serialized_data))
end
cache_redis() click to toggle source
# File lib/jdx/geocoder/base.rb, line 86
def cache_redis
  raise GeoError, "Can't call on base module"
end
error_handler() click to toggle source
# File lib/jdx/geocoder/base.rb, line 98
def error_handler
  @error_handler ||= JDX::Geocoder.configuration.error_handler
end
escape_term() click to toggle source
# File lib/jdx/geocoder/base.rb, line 82
def escape_term
  ::CGI.escape(@term)
end
fetch_data() click to toggle source
# File lib/jdx/geocoder/base.rb, line 18
def fetch_data
  cache_data = redis_fetch
  @data = if cache_data == ''
    nil
  elsif cache_data
    @cache_hit = true
    parse_json(cache_data)
  else
    @cache_hit = false
    make_api_request
  end
end
handle_request_error(response) click to toggle source
# File lib/jdx/geocoder/base.rb, line 49
def handle_request_error(response)
  if response.timed_out?
    error_handler.warning("Geocoding #{self.class} Failed: Request Timeout Error")
  elsif response.code.zero?
    error_handler.warning("Geocoding #{self.class} Failed: #{response.return_message}")
  else
    error_handler.warning("Geocoding #{self.class} Failed: #{response.code}")
  end
end
make_api_request() click to toggle source
# File lib/jdx/geocoder/base.rb, line 31
def make_api_request
  is_response_success, parsed_data = handle_response

  return unless is_response_success

  serialize_data(parsed_data).tap do |data|
    if !!data && data.any?
      cache_data(data)
    else
      blacklist_term
    end
  end
end
parse_json(raw_data) click to toggle source
# File lib/jdx/geocoder/base.rb, line 59
def parse_json(raw_data)
  JSON.parse(raw_data)
end
redis_fetch() click to toggle source
# File lib/jdx/geocoder/base.rb, line 63
      def redis_fetch
        script = <<~LUA
          local cache = redis.call("GET", KEYS[1])
          if cache == false then
            cache = redis.call("GET", KEYS[2])
          end
          return cache
        LUA
        cache_redis.eval(script, [wterm, bterm])
      end
typhoeus_get() click to toggle source
# File lib/jdx/geocoder/base.rb, line 45
def typhoeus_get
  Typhoeus.get(url, timeout: 10)
end
wterm() click to toggle source
# File lib/jdx/geocoder/base.rb, line 90
def wterm
  "w:#{@term}"
end