X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/b7335940e21bfe4fc9ac688130687398e677cfae..1f8a68371ad34594cce4aadf5fef229588fd4ddc:/app/models/relation.rb diff --git a/app/models/relation.rb b/app/models/relation.rb index 6be106159..a8789bc78 100644 --- a/app/models/relation.rb +++ b/app/models/relation.rb @@ -27,14 +27,13 @@ class Relation < ActiveRecord::Base def self.from_xml(xml, create=false) begin - p = XML::Parser.new - p.string = xml + p = XML::Parser.string(xml) doc = p.parse doc.find('//osm/relation').each do |pt| return Relation.from_xml_node(pt, create) end - rescue LibXML::XML::Error => ex + rescue LibXML::XML::Error, ArgumentError => ex raise OSM::APIBadXMLError.new("relation", xml, ex.message) end end @@ -52,7 +51,7 @@ class Relation < ActiveRecord::Base # The follow block does not need to be executed because they are dealt with # in create_with_history, update_from and delete_with_history if create - relation.timestamp = Time.now + relation.timestamp = Time.now.getutc relation.visible = true relation.version = 0 else @@ -254,6 +253,7 @@ class Relation < ActiveRecord::Base raise OSM::APIPreconditionFailedError.new end self.changeset_id = new_relation.changeset_id + self.changeset = new_relation.changeset self.tags = new_relation.tags self.members = new_relation.members self.visible = true @@ -334,7 +334,7 @@ class Relation < ActiveRecord::Base # changed then we have to monitor their before and after state. tags_changed = false - t = Time.now + t = Time.now.getutc self.version += 1 self.timestamp = t self.save! @@ -373,6 +373,10 @@ class Relation < ActiveRecord::Base tag.id = self.id tag.save! end + + # reload, so that all of the members are accessible in their + # new state. + self.reload # same pattern as before, but this time we're collecting the # changed members in an array, as the bounding box updates for