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