module Google::Geocoding

Constants

BASE_URL
LatLng
VERSION

Public Class Methods

config() click to toggle source
# File lib/google/geocoding.rb, line 22
def config
  @config ||= Configuration.new(Faraday.new(url: BASE_URL))
end
configure() { |config| ... } click to toggle source
# File lib/google/geocoding.rb, line 26
def configure(&block)
  yield(config) if block_given?
end
lookup(arg) click to toggle source

TODO needs better exception handling for Faraday using a custom middleware

# File lib/google/geocoding.rb, line 31
def lookup(arg)
  unless config.api_key
    raise ArgumentError, 'lookup method requires :api_key (Make sure if you have configured that)'
  end

  request_url =
    case arg
    when String
      "?address=#{URI.escape(arg)}&key=#{config.api_key}"
    when LatLng
      "?latlng=#{arg.latitude},#{arg.longitude}&key=#{config.api_key}"
    else
      raise ArgumentError, 'lookup method only accepts either String or LatLng'
    end

  parse_response config.client.get(request_url)
end

Private Class Methods

parse_response(response) click to toggle source
# File lib/google/geocoding.rb, line 84
def parse_response(response)
  jsonified_body = JSON.parse(response.body)

  if jsonified_body['status'] == 'REQUEST_DENIED'
    raise RequestError, jsonified_body['error_message']
  end

  results = jsonified_body['results']
  results.map do |result|
    address_components = result['address_components'].map do |address|
      Address.new(address['long_name'], address['short_name'], address['types'])
    end
    g = result['geometry']
    geometry = Geometry.new(g['bounds'], g['location'], g['location_type'], g['viewport'])
    Result.new(address_components, result['formatted_address'], geometry, result['place_id'], result['types'])
  end
end