X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/222d31e435f003ec59e84860d2fa5129449f69de..1a6765f1a23793e986504445025ec3fd7bd78171:/app/models/way.rb diff --git a/app/models/way.rb b/app/models/way.rb index 2773ecc7b..85b52aa88 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -2,6 +2,10 @@ class Way < ActiveRecord::Base require 'xml/libxml' belongs_to :user + + has_many :way_segments, :foreign_key => 'id' + has_many :way_tags, :foreign_key => 'id' + set_table_name 'current_ways' def self.from_xml(xml, create=false) @@ -12,7 +16,7 @@ class Way < ActiveRecord::Base way = Way.new doc.find('//osm/way').each do |pt| - if !create and pt['id'] != '0' + unless create and pt['id'] == '0' way.id = pt['id'].to_i end @@ -32,13 +36,43 @@ class Way < ActiveRecord::Base pt.find('seg').each do |seg| way.add_seg_num(seg['id']) end - end return way end + def to_xml + doc = XML::Document.new + doc.encoding = 'UTF-8' + root = XML::Node.new 'osm' + root['version'] = '0.4' + root['generator'] = 'OpenStreetMap server' + + doc.root = root + + el1 = XML::Node.new 'way' + el1['id'] = self.id.to_s + el1['visible'] = self.visible.to_s + el1['timestamp'] = self.timestamp.xmlschema + + self.way_segments.each do |seg| # FIXME need to make sure they come back in the right order + e = XML::Node.new 'seg' + e['id'] = seg.segment_id.to_s + el1 << e + end + + self.way_tags.each do |tag| + e = XML::Node.new 'tag' + e['k'] = tag.k + e['v'] = tag.v + el1 << e + end + + root << el1 + return doc + end + def segs @segs = Array.new unless @segs @segs @@ -49,6 +83,14 @@ class Way < ActiveRecord::Base @tags end + def segs=(s) + @segs = s + end + + def tags=(t) + @tags = t + end + def add_seg_num(n) @segs = Array.new unless @segs @segs << n.to_i @@ -74,8 +116,21 @@ class Way < ActiveRecord::Base tag.save end + WaySegment.delete_all(['id = ?', self.id]) + + i = 0 + self.segs.each do |n| + seg = WaySegment.new + seg.id = self.id + seg.segment_id = n + seg.sequence_id = i + seg.save + i += 1 + end + old_way = OldWay.from_way(self) - old_way.save + old_way.timestamp = t + old_way.save_with_dependencies end end