diff --git a/app/models/location.rb b/app/models/location.rb index b3896c32e..a1fb30572 100644 --- a/app/models/location.rb +++ b/app/models/location.rb @@ -1,12 +1,17 @@ class Location < ActiveRecord::Base - - before_validation :split_coords, :on => :create + before_validation :split_coords, on: :create + validates_presence_of :lat, :lng attr_accessor :coordinates + include Diaspora::Federated::Base + xml_attr :address + xml_attr :lat + xml_attr :lng + belongs_to :status_message def split_coords - coordinates.present? ? (self.lat, self.lng = coordinates.split(',')) : false + self.lat, self.lng = coordinates.split(',') if coordinates.present? end end diff --git a/app/models/status_message.rb b/app/models/status_message.rb index c46c3e3d3..0c95ebc01 100644 --- a/app/models/status_message.rb +++ b/app/models/status_message.rb @@ -15,6 +15,7 @@ class StatusMessage < Post xml_name :status_message xml_attr :raw_message xml_attr :photos, :as => [Photo] + xml_attr :location, :as => Location has_many :photos, :dependent => :destroy, :foreign_key => :status_message_guid, :primary_key => :guid diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb index d51a7713b..b160ae294 100644 --- a/spec/models/status_message_spec.rb +++ b/spec/models/status_message_spec.rb @@ -329,6 +329,29 @@ STR end end end + + context 'with a location' do + before do + @message.location = Location.new(coordinates: "1, 2").tap(&:save) + @xml = @message.to_xml.to_s + end + + it 'serializes the location' do + @xml.should include "location" + @xml.should include "lat" + @xml.should include "lng" + end + + describe ".from_xml" do + before do + @marshalled = StatusMessage.from_xml(@xml) + end + + it 'marshals the location' do + @marshalled.location.should be_present + end + end + end end describe '#after_dispatch' do