class GeocodingLite::GeocodingService

Constants

SERVICE_URL

Public Class Methods

new(http_object = nil, uri_object = nil, service_url = nil, json_parser = nil) click to toggle source
# File lib/geocoding_lite/geocoding_service.rb, line 9
def initialize(http_object = nil, uri_object = nil, service_url = nil, json_parser = nil)
  @http_object = http_object || Net::HTTP
  @uri_object  = uri_object  || URI
  @json_parser = json_parser || JSON
  @service_url = service_url || SERVICE_URL
end

Public Instance Methods

lookup(location) click to toggle source
# File lib/geocoding_lite/geocoding_service.rb, line 16
def lookup(location)
  load_response(send_request(location))
end

Private Instance Methods

load_response(raw_response) click to toggle source
# File lib/geocoding_lite/geocoding_service.rb, line 22
def load_response(raw_response)
  json = @json_parser.parse(raw_response)
  
  status = json['status']
  raise RuntimeError, "API returned #{status}" if 
    status != 'OK' && status != 'ZERO_RESULTS'
 
  json['results'].reduce([]) do |output, result|
    output << {
      :address => result['formatted_address'],
      :lat     => result['geometry']['location']['lat'],
      :lng     => result['geometry']['location']['lng'],
      :types   => result['types']
    }
  end
end
prepare_params(location) click to toggle source
# File lib/geocoding_lite/geocoding_service.rb, line 39
def prepare_params(location)
  url  = "#{@service_url}?"

  url << "address=#{@uri_object.encode(location)}" if
    location.kind_of? String

  url << "latlng=#{location.join(',')}" if
    location.kind_of? Array

  url << '&sensor=false'
end
send_request(location) click to toggle source
# File lib/geocoding_lite/geocoding_service.rb, line 51
def send_request(location)
  uri = @uri_object.parse(prepare_params(location))
  
  @http_object.get_response(uri).body
end