lib/barometer/data/geo.rb in barometer-0.8.0 vs lib/barometer/data/geo.rb in barometer-0.9.0

- old
+ new

@@ -1,68 +1,31 @@ module Barometer - # - # A simple Geo class - # - # Used to store location data - # - class Data::Geo + module Data + class Geo < Coordinates + attribute :query, String + attribute :address, String + attribute :locality, String + attribute :region, String + attribute :country, String + attribute :country_code, String + attribute :postal_code, String - attr_accessor :latitude, :longitude, :query - attr_accessor :locality, :region, :country, :country_code, :address + def to_s + [address, locality, region, country || country_code]. + compact.reject(&:empty?).join(', ') + end - def initialize(location=nil) - return unless location - raise ArgumentError unless location.is_a?(Hash) - self.build_from_hash(location) - self - end - - def build_from_hash(location=nil) - return nil unless location - raise ArgumentError unless location.is_a?(Hash) - - if location["geometry"] && location["geometry"]["location"] - @latitude = location["geometry"]["location"]["lat"].to_f - @longitude = location["geometry"]["location"]["lng"].to_f + def merge(other_geo) + return unless other_geo.is_a?(Data::Geo) + Data::Geo.new(merged_attributes(other_geo)) end - query_parts = [] - if location["address_components"] - location["address_components"].each do |address_components| - skip unless address_components["types"] - # sublocality trumps locality - if address_components["types"].include?('sublocality') - @locality = address_components["long_name"] - end - if address_components["types"].include?('locality') - @locality ||= address_components["long_name"] - end - if address_components["types"].include?('administrative_area_level_1') - #@region = address_components["long_name"] - @region = address_components["short_name"] - end - if address_components["types"].include?('country') - @country = address_components["long_name"] - @country_code = address_components["short_name"] - end - if !(address_components["types"] & location["types"]).empty? - query_parts << address_components["long_name"] - end + private + + def merged_attributes(other_geo) + attributes.merge(other_geo.attributes) do |key, oldval, newval| + oldval || newval end end - - @query = query_parts.join(', ') - @address = "" end - - def coordinates - [@latitude, @longitude].join(',') - end - - def to_s - s = [@address, @locality, @region, @country || @country_code] - s.delete("") - s.compact.join(', ') - end - end end