X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/e9527b363da441337ac8c44c9d3d3feada3eaa9c..8fb97a3337a8dbf688edc78dc37862c8e02d8cd9:/app/models/way.rb diff --git a/app/models/way.rb b/app/models/way.rb index ac4461f8e..dbc1197a9 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -27,8 +27,7 @@ class Way < 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/way').each do |pt| @@ -47,8 +46,10 @@ class Way < ActiveRecord::Base end way.version = pt['version'] + raise OSM::APIBadXMLError.new("node", pt, "Changeset is required") if pt['changeset'].nil? way.changeset_id = pt['changeset'] + # This next section isn't required for the create, update, or delete of ways if create way.timestamp = Time.now way.visible = true @@ -226,7 +227,7 @@ class Way < ActiveRecord::Base self.nds.each do |n| node = Node.find(:first, :conditions => ["id = ?", n]) unless node and node.visible - return false + raise OSM::APIPreconditionFailedError.new("The node with id #{n} either does not exist, or is not visible") end end return true @@ -244,7 +245,7 @@ class Way < ActiveRecord::Base check_consistency(self, new_way, user) if RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id", :conditions => [ "visible = ? AND member_type='way' and member_id=? ", true, self.id]) - raise OSM::APIPreconditionFailedError + raise OSM::APIPreconditionFailedError.new("You need to make sure that this way is not a member of a relation.") else self.changeset_id = new_way.changeset_id self.tags = [] @@ -255,26 +256,6 @@ class Way < ActiveRecord::Base end end - # delete a way and its nodes that aren't part of other ways, with history - - # FIXME: merge the potlatch code to delete the relations - # and refactor to use delete_with_history! - def delete_with_relations_and_nodes_and_history(changeset_id) - # delete the nodes not used by other ways - self.unshared_node_ids.each do |node_id| - n = Node.find(node_id) - n.changeset_id = changeset_id - n.visible = false - n.save_with_history! - end - - self.changeset_id = changeset_id - self.tags = [] - self.nds = [] - self.visible = false - self.save_with_history! - end - # Find nodes that belong to this way only def unshared_node_ids node_ids = self.nodes.collect { |node| node.id }