X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/0638eefe22586b9e9f20448e99bfe9a37f3b1540..a4f4714d0e1b1eeabe5e4b411800b949ef1e1139:/app/models/way.rb?ds=inline diff --git a/app/models/way.rb b/app/models/way.rb index a87244563..b7d0ec118 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -6,6 +6,8 @@ class Way < ActiveRecord::Base has_many :way_segments, :foreign_key => 'id' has_many :way_tags, :foreign_key => 'id' + has_many :old_ways, :foreign_key => :id + set_table_name 'current_ways' def self.from_xml(xml, create=false) @@ -43,24 +45,27 @@ class Way < ActiveRecord::Base 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 = OSM::API.new.get_xml_doc + doc.root << to_xml_node() + return doc + end - doc.root = root - + def to_xml_node 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 + el1['user'] = self.user.display_name if self.user.data_public? + # make sure segments are output in sequence_id order + ordered_segments = [] + self.way_segments.each do |seg| + ordered_segments[seg.sequence_id] = seg.segment_id.to_s + end + ordered_segments.each do |seg_id| + e = XML::Node.new 'seg' + e['id'] = seg_id + el1 << e + end self.way_tags.each do |tag| e = XML::Node.new 'tag' @@ -68,21 +73,38 @@ class Way < ActiveRecord::Base e['v'] = tag.v el1 << e end - - root << el1 - return doc - end + return el1 + end + def segs - @segs = Array.new unless @segs + unless @segs + @segs = Array.new + self.way_segments.each do |seg| + @segs += [seg.segment_id] + end + end @segs end def tags - @tags = Hash.new unless @tags + unless @tags + @tags = Hash.new + self.way_tags.each do |tag| + @tags[tag.k] = tag.v + end + end @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 @@ -125,4 +147,14 @@ class Way < ActiveRecord::Base old_way.save_with_dependencies end + def preconditions_ok? + self.segs.each do |n| + segment = Segment.find(n) + unless segment and segment.visible and segment.preconditions_ok? + return false + end + end + return true + end + end