module GoogleMaps::Geocoder

Constants

URI_BASE
URI_DOMAIN

Public Class Methods

locate!(address, options = { }) click to toggle source
# File lib/google_maps/geocoder.rb, line 18
def self.locate!(address, options = { })
  options = {
    :ssl     => false,
    :address => address,
    :sensor  => false
  }.merge(options)

  json = ActiveSupport::JSON.decode RestClient.get(url(options))
  Geocoder::Result.new(json)
rescue => e
  raise GeocodeFailed.new(address, e)
end
uri_base_path(options = { }) click to toggle source
# File lib/google_maps/geocoder.rb, line 55
def self.uri_base_path(options = { })
  protocol = options[:ssl] ? "https" : "http"
  "#{protocol}://#{URI_DOMAIN}#{URI_BASE}"
end
url(options) click to toggle source
# File lib/google_maps/geocoder.rb, line 31
def self.url(options)
  ssl      = options.delete(:ssl)
  # for enterprise account
  client   = options.delete(:client) || ::GoogleMaps.client
  key = options.delete(:key) || ::GoogleMaps.key  

  parameters = []
  options.each do |k, v|
    parameters << "#{k}=#{CGI.escape(v.to_s)}"
  end
  
  if ::GoogleMaps.enterprise_account? && client && key
    parameters << "client=#{CGI.escape(client)}"
    sign_str = "#{URI_BASE}?#{parameters.join('&')}"
    sha1 = OpenSSL::Digest::Digest.new('sha1')
    binary_key = Base64.decode64(key.tr('-_','+/'))
    binary_signature = OpenSSL::HMAC.digest(sha1, binary_key, sign_str)
    signature = Base64.encode64(binary_signature).tr('+/','-_').strip
    parameters << "signature=#{signature}"
  end
  
  "#{uri_base_path(:ssl => ssl)}?#{parameters.join('&')}"
end