module JDX::Geocoder::Base
Attributes
data[R]
Public Instance Methods
search()
click to toggle source
# File lib/jdx/geocoder/base.rb, line 12 def search !fetch_data ? nil : self end
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