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