Skip to content

Instantly share code, notes, and snippets.

@BrianTheCoder
Created January 8, 2014 22:38
Show Gist options
  • Save BrianTheCoder/8325809 to your computer and use it in GitHub Desktop.
Save BrianTheCoder/8325809 to your computer and use it in GitHub Desktop.
class Google
def self.geocode(address)
puts "address: #{address}"
@resp = client.get do |req|
req.url 'geocode/json'
req.params[:address] = address
req.params[:sensor] = false
end
@address = @resp.body['results'].first
{
street: "#{address_part('street_number')} #{address_part('route')}",
city: address_part('administrative_area_level_2'),
state: address_part('administrative_area_level_1'),
postal_code: address_part('postal_code'),
coordinates: @address['geometry']['location'].slice('lat', 'lng').values
}.reject{|k, v| v.blank? }
end
protected
def self.address_part(name)
begin
part = @address['address_components'].select{|addr| addr['types'].include?(name)}
part.first['short_name'] if part.present?
rescue StandardError => err
# puts '*' * 80
# puts err.inspect
# puts @address.inspect
puts @resp.body.inspect
# puts err.backtrace.join("\n")
end
end
def self.client
@client ||= Faraday.new 'http://maps.googleapis.com/maps/api' do |conn|
conn.use FaradayMiddleware::EncodeJson
conn.use FaradayMiddleware::ParseJson
conn.use FaradayMiddleware::Instrumentation
# conn.use Faraday::Response::Logger
conn.adapter Faraday.default_adapter
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment