From: Steve Coast Date: Sat, 26 Aug 2006 21:36:21 +0000 (+0000) Subject: more way bits X-Git-Tag: live~8650 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/b95e9d27599ee55b2fd61a444acc3264c7637265 more way bits --- diff --git a/app/controllers/node_controller.rb b/app/controllers/node_controller.rb index ae0d00c75..428d4b9c2 100644 --- a/app/controllers/node_controller.rb +++ b/app/controllers/node_controller.rb @@ -28,7 +28,7 @@ class NodeController < ApplicationController def rest unless Node.exists?(params[:id]) - render :nothing => true, :status => 400 + render :nothing => true, :status => 404 return end diff --git a/app/controllers/segment_controller.rb b/app/controllers/segment_controller.rb index 2bc4f07c7..966ede72a 100644 --- a/app/controllers/segment_controller.rb +++ b/app/controllers/segment_controller.rb @@ -36,7 +36,7 @@ class SegmentController < ApplicationController def rest unless Segment.exists?(params[:id]) - render :nothing => true, :status => 400 + render :nothing => true, :status => 404 return end diff --git a/app/controllers/way_controller.rb b/app/controllers/way_controller.rb index 2c948214e..49a3b3bfe 100644 --- a/app/controllers/way_controller.rb +++ b/app/controllers/way_controller.rb @@ -26,4 +26,33 @@ class WayController < ApplicationController render :nothing => true, :status => 500 # something went very wrong end + def rest + unless Way.exists?(params[:id]) + render :nothing => true, :status => 404 + return + end + + way = Way.find(params[:id]) + case request.method + + when :get + unless way.visible + render :nothing => true, :status => 410 + return + end + render :text => way.to_xml.to_s + + when :delete + unless way.visible + render :nothing => true, :status => 410 + return + end + + way.visible = false + way.save_with_history + + end + + end + end diff --git a/app/controllers/way_segment_controller.rb b/app/controllers/way_segment_controller.rb new file mode 100644 index 000000000..fb3c09cbd --- /dev/null +++ b/app/controllers/way_segment_controller.rb @@ -0,0 +1,2 @@ +class WaySegmentController < ApplicationController +end diff --git a/app/helpers/way_segment_helper.rb b/app/helpers/way_segment_helper.rb new file mode 100644 index 000000000..f2ebd3960 --- /dev/null +++ b/app/helpers/way_segment_helper.rb @@ -0,0 +1,2 @@ +module WaySegmentHelper +end diff --git a/app/models/way.rb b/app/models/way.rb index 2773ecc7b..9ae45d40f 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) @@ -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 @@ -74,6 +108,18 @@ 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 end diff --git a/app/models/way_segment.rb b/app/models/way_segment.rb new file mode 100644 index 000000000..502174d7b --- /dev/null +++ b/app/models/way_segment.rb @@ -0,0 +1,3 @@ +class WaySegment < ActiveRecord::Base + set_table_name 'current_way_segments' +end diff --git a/config/routes.rb b/config/routes.rb index 7ba5ad902..5c95e148d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,7 +10,7 @@ ActionController::Routing::Routes.draw do |map| map.connect 'api/0.4/segment/:id', :controller => 'segment', :action => 'rest' map.connect 'api/0.4/way/create', :controller => 'way', :action => 'create' - + map.connect 'api/0.4/way/:id', :controller => 'way', :action => 'rest' # misc site stuff diff --git a/db/migrate/011_create_way_segments.rb b/db/migrate/011_create_way_segments.rb new file mode 100644 index 000000000..d00ed6ef1 --- /dev/null +++ b/db/migrate/011_create_way_segments.rb @@ -0,0 +1,11 @@ +class CreateWaySegments < ActiveRecord::Migration + def self.up + create_table :way_segments do |t| + # t.column :name, :string + end + end + + def self.down + drop_table :way_segments + end +end