more way bits

This commit is contained in:
Steve Coast 2006-08-26 21:36:21 +00:00
parent 7c1b6e850d
commit b95e9d2759
9 changed files with 97 additions and 4 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,2 @@
class WaySegmentController < ApplicationController
end

View file

@ -0,0 +1,2 @@
module WaySegmentHelper
end

View file

@ -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)
@ -33,12 +37,42 @@ class Way < ActiveRecord::Base
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

View file

@ -0,0 +1,3 @@
class WaySegment < ActiveRecord::Base
set_table_name 'current_way_segments'
end

View file

@ -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

View file

@ -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