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