rails updates
This commit is contained in:
parent
a6f61bd18a
commit
613e88c4a8
9 changed files with 113 additions and 35 deletions
|
@ -37,6 +37,16 @@ class NodeController < ApplicationController
|
||||||
case request.method
|
case request.method
|
||||||
|
|
||||||
when :get
|
when :get
|
||||||
|
unless node
|
||||||
|
render :nothing => true, :status => 500
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
unless node.visible
|
||||||
|
render :nothing => true, :status => 410
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
render :text => node.to_xml.to_s
|
render :text => node.to_xml.to_s
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -68,4 +78,33 @@ class NodeController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def history
|
||||||
|
node = Node.find(params[:id])
|
||||||
|
|
||||||
|
unless node
|
||||||
|
render :nothing => true, :staus => 404
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
doc = XML::Document.new
|
||||||
|
doc.encoding = 'UTF-8'
|
||||||
|
root = XML::Node.new 'osm'
|
||||||
|
root['version'] = '0.4'
|
||||||
|
root['generator'] = 'OpenStreetMap server'
|
||||||
|
doc.root = root
|
||||||
|
|
||||||
|
node.old_nodes.each do |old_node|
|
||||||
|
el1 = XML::Node.new 'node'
|
||||||
|
el1['id'] = old_node.id.to_s
|
||||||
|
el1['lat'] = old_node.latitude.to_s
|
||||||
|
el1['lon'] = old_node.longitude.to_s
|
||||||
|
Node.split_tags(el1, old_node.tags)
|
||||||
|
el1['visible'] = old_node.visible.to_s
|
||||||
|
el1['timestamp'] = old_node.timestamp.xmlschema
|
||||||
|
root << el1
|
||||||
|
end
|
||||||
|
|
||||||
|
render :text => doc.to_s
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
class SegmentController < ApplicationController
|
class SegmentController < ApplicationController
|
||||||
|
|
||||||
require 'xml/libxml'
|
require 'xml/libxml'
|
||||||
|
|
||||||
before_filter :authorize
|
before_filter :authorize
|
||||||
|
@ -9,9 +8,17 @@ class SegmentController < ApplicationController
|
||||||
segment = Segment.from_xml(request.raw_post, true)
|
segment = Segment.from_xml(request.raw_post, true)
|
||||||
|
|
||||||
if segment
|
if segment
|
||||||
|
|
||||||
segment.user_id = @user.id
|
segment.user_id = @user.id
|
||||||
if segment.save_with_history
|
|
||||||
|
|
||||||
|
a = Node.find(segment.node_a.to_i)
|
||||||
|
b = Node.find(segment.node_b.to_i)
|
||||||
|
|
||||||
|
unless a and a.visible and b and b.visible
|
||||||
|
render :nothing => true, :status => 400
|
||||||
|
end
|
||||||
|
|
||||||
|
if segment.save_with_history
|
||||||
render :text => segment.id
|
render :text => segment.id
|
||||||
else
|
else
|
||||||
render :nothing => true, :status => 500
|
render :nothing => true, :status => 500
|
||||||
|
@ -56,9 +63,10 @@ class SegmentController < ApplicationController
|
||||||
segment.timestamp = Time.now
|
segment.timestamp = Time.now
|
||||||
segment.user_id = @user.id
|
segment.user_id = @user.id
|
||||||
|
|
||||||
segment.latitude = new_segment.latitude
|
segment.node_a = new_segment.node_a
|
||||||
segment.longitude = new_segment.longitude
|
segment.node_b = new_segment.node_b
|
||||||
segment.tags = new_segment.tags
|
segment.tags = new_segment.tags
|
||||||
|
segment.visible = new_segment.visible
|
||||||
|
|
||||||
if segment.id == new_segment.id and segment.save_with_history
|
if segment.id == new_segment.id and segment.save_with_history
|
||||||
render :nothing => true, :status => 200
|
render :nothing => true, :status => 200
|
||||||
|
@ -70,5 +78,34 @@ class SegmentController < ApplicationController
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def history
|
||||||
|
segment = Segment.find(params[:id])
|
||||||
|
|
||||||
|
unless segment
|
||||||
|
render :nothing => true, :staus => 404
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
doc = XML::Document.new
|
||||||
|
doc.encoding = 'UTF-8'
|
||||||
|
root = XML::Node.new 'osm'
|
||||||
|
root['version'] = '0.4'
|
||||||
|
root['generator'] = 'OpenStreetMap server'
|
||||||
|
doc.root = root
|
||||||
|
|
||||||
|
segment.old_segments.each do |old_segment|
|
||||||
|
el1 = XML::Node.new 'segment'
|
||||||
|
el1['id'] = old_segment.id.to_s
|
||||||
|
el1['from'] = old_segment.node_a.to_s
|
||||||
|
el1['to'] = old_segment.node_b.to_s
|
||||||
|
Segment.split_tags(el1, old_segment.tags)
|
||||||
|
el1['visible'] = old_segment.visible.to_s
|
||||||
|
el1['timestamp'] = old_segment.timestamp.xmlschema
|
||||||
|
root << el1
|
||||||
|
end
|
||||||
|
|
||||||
|
render :text => doc.to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
2
app/controllers/site_controller.rb
Normal file
2
app/controllers/site_controller.rb
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
class SiteController < ApplicationController
|
||||||
|
end
|
2
app/helpers/site_helper.rb
Normal file
2
app/helpers/site_helper.rb
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
module SiteHelper
|
||||||
|
end
|
|
@ -31,7 +31,7 @@ class Node < ActiveRecord::Base
|
||||||
node.id = pt['id'].to_i
|
node.id = pt['id'].to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
node.visible = pt['visible'] == '1'
|
node.visible = pt['visible'] and pt['visible'] == 'true'
|
||||||
|
|
||||||
if create
|
if create
|
||||||
node.timestamp = Time.now
|
node.timestamp = Time.now
|
||||||
|
@ -59,8 +59,8 @@ class Node < ActiveRecord::Base
|
||||||
def save_with_history
|
def save_with_history
|
||||||
begin
|
begin
|
||||||
Node.transaction do
|
Node.transaction do
|
||||||
old_node = OldNode.from_node(self)
|
|
||||||
self.save
|
self.save
|
||||||
|
old_node = OldNode.from_node(self)
|
||||||
old_node.save
|
old_node.save
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
|
@ -80,15 +80,14 @@ class Node < ActiveRecord::Base
|
||||||
el1['id'] = self.id.to_s
|
el1['id'] = self.id.to_s
|
||||||
el1['lat'] = self.latitude.to_s
|
el1['lat'] = self.latitude.to_s
|
||||||
el1['lon'] = self.longitude.to_s
|
el1['lon'] = self.longitude.to_s
|
||||||
split_tags(el1, self.tags)
|
Node.split_tags(el1, self.tags)
|
||||||
el1['visible'] = self.visible.to_s
|
el1['visible'] = self.visible.to_s
|
||||||
el1['timestamp'] = self.timestamp.xmlschema
|
el1['timestamp'] = self.timestamp.xmlschema
|
||||||
root << el1
|
root << el1
|
||||||
return doc
|
return doc
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
def self.split_tags(el, tags)
|
||||||
def split_tags(el, tags)
|
|
||||||
tags.split(';').each do |tag|
|
tags.split(';').each do |tag|
|
||||||
parts = tag.split('=')
|
parts = tag.split('=')
|
||||||
key = ''
|
key = ''
|
||||||
|
@ -103,4 +102,5 @@ class Node < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,8 +2,8 @@ class Segment < ActiveRecord::Base
|
||||||
require 'xml/libxml'
|
require 'xml/libxml'
|
||||||
set_table_name 'current_segments'
|
set_table_name 'current_segments'
|
||||||
|
|
||||||
validates_numericality_of :segment_a
|
validates_numericality_of :node_a
|
||||||
validates_numericality_of :segment_b
|
validates_numericality_of :node_b
|
||||||
# FIXME validate a nd b exist and are visible
|
# FIXME validate a nd b exist and are visible
|
||||||
|
|
||||||
has_many :old_segments, :foreign_key => :id
|
has_many :old_segments, :foreign_key => :id
|
||||||
|
@ -19,14 +19,14 @@ class Segment < ActiveRecord::Base
|
||||||
|
|
||||||
doc.find('//osm/segment').each do |pt|
|
doc.find('//osm/segment').each do |pt|
|
||||||
|
|
||||||
segment.segment_a = pt['from'].to_i
|
segment.node_a = pt['from'].to_i
|
||||||
segment.segment_b = pt['to'].to_i
|
segment.node_b = pt['to'].to_i
|
||||||
|
|
||||||
if pt['id'] != '0'
|
if pt['id'] != '0'
|
||||||
segment.id = pt['id'].to_i
|
segment.id = pt['id'].to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
segment.visible = pt['visible'] == '1'
|
segment.visible = pt['visible'] and pt['visible'] == 'true'
|
||||||
|
|
||||||
if create
|
if create
|
||||||
segment.timestamp = Time.now
|
segment.timestamp = Time.now
|
||||||
|
@ -54,8 +54,8 @@ class Segment < ActiveRecord::Base
|
||||||
def save_with_history
|
def save_with_history
|
||||||
begin
|
begin
|
||||||
Segment.transaction do
|
Segment.transaction do
|
||||||
old_segment = OldSegment.from_segment(self)
|
|
||||||
self.save
|
self.save
|
||||||
|
old_segment = OldSegment.from_segment(self)
|
||||||
old_segment.save
|
old_segment.save
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
|
@ -67,23 +67,22 @@ class Segment < ActiveRecord::Base
|
||||||
def to_xml
|
def to_xml
|
||||||
doc = XML::Document.new
|
doc = XML::Document.new
|
||||||
doc.encoding = 'UTF-8'
|
doc.encoding = 'UTF-8'
|
||||||
root = XML::Segment.new 'osm'
|
root = XML::Node.new 'osm'
|
||||||
root['version'] = '0.4'
|
root['version'] = '0.4'
|
||||||
root['generator'] = 'OpenStreetMap server'
|
root['generator'] = 'OpenStreetMap server'
|
||||||
doc.root = root
|
doc.root = root
|
||||||
el1 = XML::Segment.new 'segment'
|
el1 = XML::Node.new 'segment'
|
||||||
el1['id'] = self.id.to_s
|
el1['id'] = self.id.to_s
|
||||||
el1['lat'] = self.latitude.to_s
|
el1['from'] = self.node_a.to_s
|
||||||
el1['lon'] = self.longitude.to_s
|
el1['to'] = self.node_b.to_s
|
||||||
split_tags(el1, self.tags)
|
Segment.split_tags(el1, self.tags)
|
||||||
el1['visible'] = self.visible.to_s
|
el1['visible'] = self.visible.to_s
|
||||||
el1['timestamp'] = self.timestamp.xmlschema
|
el1['timestamp'] = self.timestamp.xmlschema
|
||||||
root << el1
|
root << el1
|
||||||
return doc
|
return doc
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
def self.split_tags(el, tags)
|
||||||
def split_tags(el, tags)
|
|
||||||
tags.split(';').each do |tag|
|
tags.split(';').each do |tag|
|
||||||
parts = tag.split('=')
|
parts = tag.split('=')
|
||||||
key = ''
|
key = ''
|
||||||
|
|
|
@ -2,14 +2,14 @@ ActionController::Routing::Routes.draw do |map|
|
||||||
# map.connect ':controller/service.wsdl', :action => 'wsdl'
|
# map.connect ':controller/service.wsdl', :action => 'wsdl'
|
||||||
|
|
||||||
map.connect 'api/0.4/node/create', :controller => 'node', :action => 'create'
|
map.connect 'api/0.4/node/create', :controller => 'node', :action => 'create'
|
||||||
|
map.connect 'api/0.4/node/:id/history', :controller => 'node', :action => 'history', :id => nil
|
||||||
map.connect 'api/0.4/node/:id', :controller => 'node', :action => 'rest', :id => nil
|
map.connect 'api/0.4/node/:id', :controller => 'node', :action => 'rest', :id => nil
|
||||||
|
|
||||||
|
map.connect 'api/0.4/segment/create', :controller => 'segment', :action => 'create'
|
||||||
# map.connect 'api/0.4/segment/:id', :controller => 'segment', :action => 'rest'
|
map.connect 'api/0.4/segment/:id/history', :controller => 'segment', :action => 'history'
|
||||||
# map.connect 'api/0.4/segment/create', :controller => 'segment', :action => 'create'
|
map.connect 'api/0.4/segment/:id', :controller => 'segment', :action => 'rest'
|
||||||
|
|
||||||
|
map.connect '/', :controller => 'site', :action => 'index'
|
||||||
|
|
||||||
# map.connect 'api/0.4/way/:id', :controller => 'way', :action => 'rest'
|
|
||||||
# map.connect 'api/0.4/way/create', :controller => 'way', :action => 'create'
|
|
||||||
|
|
||||||
map.connect ':controller/:action/:id'
|
map.connect ':controller/:action/:id'
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
drop table meta_nodes;
|
drop table meta_nodes;
|
||||||
alter table current_nodes modify tags text not null;
|
alter table current_nodes modify tags text not null;
|
||||||
alter table current_nodes modify id bigint(64) not null auto_increment;
|
alter table current_nodes modify id bigint(64) not null auto_increment;
|
||||||
|
|
||||||
|
|
||||||
alter table nodes modify tags text not null;
|
alter table nodes modify tags text not null;
|
||||||
|
|
||||||
|
|
||||||
|
drop table meta_segments;
|
||||||
|
alter table current_segments modify tags text not null;
|
||||||
|
alter table current_segments modify id bigint(64) not null auto_increment;
|
||||||
|
alter table segments modify tags text not null;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
|
|
||||||
nuffin here
|
|
||||||
|
|
||||||
<a href="/user/new">new user</a>
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue