Sha256: 3ea807dfc9ddd9f10f01b26d727a9cd76d336a54970373ed98708322ead4c6e0

Contents?: true

Size: 1.73 KB

Versions: 2

Compression:

Stored size: 1.73 KB

Contents

module Graticule
  class Location
    
    attr_accessor :country_code
    
    def attributes
      [:latitude, :longitude, :street, :locality, :region, :postal_code, :country, :precision, :cuntry_code].inject({}) do |result,attr|
        result[attr] = self.send(attr) unless self.send(attr).blank?
        result
      end
    end
    
  end
  
  module Geocoder
    
    class Google < Rest
      
      # Locates +address+ returning a Location
      # add ability to bias towards a country
      def locate(address, country_bias=nil)
        get :q => (address.is_a?(String) ? address : location_from_params(address).to_s),
          :gl => country_bias
      end
      
      private
      
      # Extracts a Location from +xml+.
      def parse_response(xml) #:nodoc:
        longitude, latitude, = xml.elements['/kml/Response/Placemark/Point/coordinates'].text.split(',').map { |v| v.to_f }
        returning Location.new(:latitude => latitude, :longitude => longitude) do |l|
          address = REXML::XPath.first(xml, '//xal:AddressDetails',
            'xal' => "urn:oasis:names:tc:ciq:xsdschema:xAL:2.0")
 
          if address
            l.street = value(address.elements['.//ThoroughfareName/text()'])
            l.locality = value(address.elements['.//LocalityName/text()'])
            l.region = value(address.elements['.//AdministrativeAreaName/text()'])
            l.postal_code = value(address.elements['.//PostalCodeNumber/text()'])
            l.country = value(address.elements['.//CountryName/text()'])
            l.country_code = value(address.elements['.//CountryNameCode/text()'])
            l.precision = PRECISION[address.attribute('Accuracy').value.to_i] || :unknown
          end
        end
      end
      
    end
    
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
attack-barometer-0.1.0 lib/barometer/extensions/graticule.rb
barometer-0.1.0 lib/barometer/extensions/graticule.rb