]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/old_way.rb
Use tile based query when creating a way from unwayed segments.
[rails.git] / app / models / old_way.rb
index 6682c644a613b0140acdb5e3b0648b59002b57a8..e4df258167ca3b7f4fff49b42f014cef4d63b6c5 100644 (file)
@@ -5,6 +5,7 @@ class OldWay < ActiveRecord::Base
 
   def self.from_way(way)
     old_way = OldWay.new
+    old_way.visible = way.visible
     old_way.user_id = way.user_id
     old_way.timestamp = way.timestamp
     old_way.id = way.id
@@ -13,7 +14,7 @@ class OldWay < ActiveRecord::Base
     return old_way
   end
 
-  def save_with_dependencies
+  def save_with_dependencies!
 
     # dont touch this unless you really have figured out why it's called
     # (Rails doesn't deal well with the old ways table (called 'ways') because
@@ -21,7 +22,7 @@ class OldWay < ActiveRecord::Base
     # id and get it back but we have that and we want to get the 'version' back
     # we could add another column but thats a lot of data. No, set_primary_key
     # doesn't work either.
-    save()
+    save!
     clear_aggregation_cache
     clear_association_cache
     @attributes.update(OldWay.find(:first, :conditions => ['id = ? AND timestamp = ?', self.id, self.timestamp]).instance_variable_get('@attributes'))
@@ -34,25 +35,36 @@ class OldWay < ActiveRecord::Base
       tag.v = v
       tag.id = self.id
       tag.version = self.version
-      tag.save
+      tag.save!
     end
 
-    i = 0
+    i = 1
     self.segs.each do |n|
       seg = OldWaySegment.new
       seg.id = self.id
       seg.segment_id = n
       seg.version = self.version
-      seg.save
+      seg.save!
     end
   end
 
   def segs
-    @segs = Array.new unless @segs
+    unless @segs
+        @segs = Array.new
+        OldWaySegment.find(:all, :conditions => ["id = ? AND version = ?", self.id, self.version], :order => "sequence_id").each do |seg|
+            @segs += [seg.segment_id]
+        end
+    end
     @segs
   end
 
   def tags
+    unless @tags
+        @tags = Hash.new
+        OldWayTag.find(:all, :conditions => ["id = ? AND version = ?", self.id, self.version]).each do |tag|
+            @tags[tag.k] = tag.v
+        end
+    end
     @tags = Hash.new unless @tags
     @tags
   end
@@ -81,6 +93,7 @@ class OldWay < ActiveRecord::Base
     el1['id'] = self.id.to_s
     el1['visible'] = self.visible.to_s
     el1['timestamp'] = self.timestamp.xmlschema
+    el1['user'] = self.user.display_name if self.user.data_public?
     
     self.old_segments.each do |seg| # FIXME need to make sure they come back in the right order
       e = XML::Node.new 'seg'