]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/way.rb
Work round ruby's half assed Tempfile class which, because for some
[rails.git] / app / models / way.rb
index 924fffe5c84b99775a37fec5b116f5d9a0ec4ec0..d0b961123ca729367706c913322b2a147f9c0a3b 100644 (file)
@@ -3,6 +3,7 @@ class Way < ActiveRecord::Base
 
   belongs_to :user
 
+  has_many :nodes, :through => :way_nodes, :order => 'sequence_id'
   has_many :way_nodes, :foreign_key => 'id', :order => 'sequence_id'
   has_many :way_tags, :foreign_key => 'id'
 
@@ -224,4 +225,29 @@ class Way < ActiveRecord::Base
       raise OSM::APIAlreadyDeletedError
     end
   end
+
+  # delete a way and it's nodes that aren't part of other ways, with history
+  def delete_with_relations_and_nodes_and_history(user)
+    
+    node_ids = self.nodes.collect {|node| node.id }
+    node_ids_not_to_delete = []
+    way_nodes = WayNode.find(:all, :conditions => "node_id in (#{node_ids.join(',')}) and id != #{self.id}")
+    
+    node_ids_not_to_delete = way_nodes.collect {|way_node| way_node.node_id}
+
+    node_ids_to_delete = node_ids - node_ids_not_to_delete
+
+    # delete the nodes not used by other ways
+    node_ids_to_delete.each do |node_id|
+      n = Node.find(node_id)
+      n.user_id = user.id
+      n.visible = false
+      n.save_with_history!
+    end
+    
+    self.user_id = user.id
+
+    self.delete_with_relations_and_history(user)
+
+  end
 end