rails updates
authorSteve Coast <steve@asklater.com>
Sat, 26 Aug 2006 16:34:52 +0000 (16:34 +0000)
committerSteve Coast <steve@asklater.com>
Sat, 26 Aug 2006 16:34:52 +0000 (16:34 +0000)
app/controllers/node_controller.rb
app/controllers/segment_controller.rb
app/controllers/site_controller.rb [new file with mode: 0644]
app/helpers/site_helper.rb [new file with mode: 0644]
app/models/node.rb
app/models/segment.rb
config/routes.rb
db/migrate.sql
public/index.html [deleted file]

index b104688d38a58632cbadf75779a14eb1a3208e96..ae0d00c75c5dc6901bb2bf57bce54779f07cc96b 100644 (file)
@@ -37,6 +37,16 @@ class NodeController < ApplicationController
     case request.method
 
     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
       return
 
@@ -68,4 +78,33 @@ class NodeController < ApplicationController
     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
index 21de13be84f56ab1bb2ce9d579c5886c167ed60a..2bc4f07c740dceea5c0ea92a143def42740281b3 100644 (file)
@@ -1,5 +1,4 @@
 class SegmentController < ApplicationController
-
   require 'xml/libxml'
 
   before_filter :authorize
@@ -9,9 +8,17 @@ class SegmentController < ApplicationController
       segment = Segment.from_xml(request.raw_post, true)
 
       if segment
+        
         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
         else
           render :nothing => true, :status => 500
@@ -56,9 +63,10 @@ class SegmentController < ApplicationController
       segment.timestamp = Time.now
       segment.user_id = @user.id
 
-      segment.latitude = new_segment.latitude 
-      segment.longitude = new_segment.longitude
+      segment.node_a = new_segment.node_a
+      segment.node_b = new_segment.node_b
       segment.tags = new_segment.tags
+      segment.visible = new_segment.visible
 
       if segment.id == new_segment.id and segment.save_with_history
         render :nothing => true, :status => 200
@@ -70,5 +78,34 @@ class SegmentController < ApplicationController
 
   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
diff --git a/app/controllers/site_controller.rb b/app/controllers/site_controller.rb
new file mode 100644 (file)
index 0000000..eebb233
--- /dev/null
@@ -0,0 +1,2 @@
+class SiteController < ApplicationController
+end
diff --git a/app/helpers/site_helper.rb b/app/helpers/site_helper.rb
new file mode 100644 (file)
index 0000000..c879486
--- /dev/null
@@ -0,0 +1,2 @@
+module SiteHelper
+end
index 5c436fe46654a1f208561204dab9aae8d4ad9d9f..c37be933a26eef84c2e5c24a45cc7b58b0b4fd32 100644 (file)
@@ -31,7 +31,7 @@ class Node < ActiveRecord::Base
         node.id = pt['id'].to_i
       end
 
-      node.visible = pt['visible'] == '1'
+      node.visible = pt['visible'] and pt['visible'] == 'true'
 
       if create
         node.timestamp = Time.now
@@ -59,8 +59,8 @@ class Node < ActiveRecord::Base
   def save_with_history
     begin
       Node.transaction do
-        old_node = OldNode.from_node(self)
         self.save
+        old_node = OldNode.from_node(self)
         old_node.save
       end
       return true
@@ -80,15 +80,14 @@ class Node < ActiveRecord::Base
     el1['id'] = self.id.to_s
     el1['lat'] = self.latitude.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['timestamp'] = self.timestamp.xmlschema
     root << el1
     return doc
   end
 
-  private
-  def split_tags(el, tags)
+  def self.split_tags(el, tags)
     tags.split(';').each do |tag|
       parts = tag.split('=')
       key = ''
@@ -103,4 +102,5 @@ class Node < ActiveRecord::Base
       end
     end
   end
+
 end
index 19d7b2b636c738f1f5d4d41fcb2729e30813e27a..70ce6a4ecf22c09cc9a38f3accb3fd69d6a67ed8 100644 (file)
@@ -2,8 +2,8 @@ class Segment < ActiveRecord::Base
   require 'xml/libxml'
   set_table_name 'current_segments'
 
-  validates_numericality_of :segment_a
-  validates_numericality_of :segment_b
+  validates_numericality_of :node_a
+  validates_numericality_of :node_b
   # FIXME validate a nd b exist and are visible
 
   has_many :old_segments, :foreign_key => :id
@@ -19,14 +19,14 @@ class Segment < ActiveRecord::Base
 
     doc.find('//osm/segment').each do |pt|
 
-      segment.segment_a = pt['from'].to_i
-      segment.segment_b = pt['to'].to_i
+      segment.node_a = pt['from'].to_i
+      segment.node_b = pt['to'].to_i
 
       if pt['id'] != '0'
         segment.id = pt['id'].to_i
       end
 
-      segment.visible = pt['visible'] == '1'
+      segment.visible = pt['visible'] and pt['visible'] == 'true'
 
       if create
         segment.timestamp = Time.now
@@ -54,8 +54,8 @@ class Segment < ActiveRecord::Base
   def save_with_history
     begin
       Segment.transaction do
-        old_segment = OldSegment.from_segment(self)
         self.save
+        old_segment = OldSegment.from_segment(self)
         old_segment.save
       end
       return true
@@ -67,23 +67,22 @@ class Segment < ActiveRecord::Base
   def to_xml
     doc = XML::Document.new
     doc.encoding = 'UTF-8' 
-    root = XML::Segment.new 'osm'
+    root = XML::Node.new 'osm'
     root['version'] = '0.4'
     root['generator'] = 'OpenStreetMap server'
     doc.root = root
-    el1 = XML::Segment.new 'segment'
+    el1 = XML::Node.new 'segment'
     el1['id'] = self.id.to_s
-    el1['lat'] = self.latitude.to_s
-    el1['lon'] = self.longitude.to_s
-    split_tags(el1, self.tags)
+    el1['from'] = self.node_a.to_s
+    el1['to'] = self.node_b.to_s
+    Segment.split_tags(el1, self.tags)
     el1['visible'] = self.visible.to_s
     el1['timestamp'] = self.timestamp.xmlschema
     root << el1
     return doc
   end
 
-  private
-  def split_tags(el, tags)
+  def self.split_tags(el, tags)
     tags.split(';').each do |tag|
       parts = tag.split('=')
       key = ''
index 4b87400b44c69ffbac2d2fad6eb20d1c455c4695..ac57c7ef21df14fef2811a23308f8878649fbe91 100644 (file)
@@ -2,14 +2,14 @@ ActionController::Routing::Routes.draw do |map|
 #  map.connect ':controller/service.wsdl', :action => 'wsdl'
 
   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/segment/:id', :controller => 'segment', :action => 'rest'
-#  map.connect 'api/0.4/segment/create', :controller => 'segment', :action => 'create'
+  map.connect 'api/0.4/segment/create', :controller => 'segment', :action => 'create'
+  map.connect 'api/0.4/segment/:id/history', :controller => 'segment', :action => 'history'
+  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'
 end
index 83840d5cfa097f9a1950e81e0010b0a626130cc3..abbc0ae244e240533900444bbdce3f2b6b504ee5 100644 (file)
@@ -1,7 +1,11 @@
 drop table meta_nodes;
 alter table current_nodes modify tags text not null;
 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;
 
diff --git a/public/index.html b/public/index.html
deleted file mode 100644 (file)
index 319ca90..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-nuffin here
-
-<a href="/user/new">new user</a>
-