adding some version reading for the nodes
authorShaun McDonald <shaun@shaunmcdonald.me.uk>
Mon, 29 Sep 2008 16:28:51 +0000 (16:28 +0000)
committerShaun McDonald <shaun@shaunmcdonald.me.uk>
Mon, 29 Sep 2008 16:28:51 +0000 (16:28 +0000)
app/controllers/node_controller.rb
config/routes.rb

index 4a75277348e1d6dc4de8a0a89424a9cadd441298..70bf597345c27044a3282c105c02f0c796dfce43 100644 (file)
@@ -43,6 +43,21 @@ class NodeController < ApplicationController
       render :nothing => true, :status => :not_found
     end
   end
+  
+  # Dump a specific version of the node based on the given params[:id] and params[:version]
+  def version
+    begin
+      node = Node.find(:first, :conditions => { :id => params[:id], :version => params[:version] } )
+      if node.visible
+        response.headers['Last-Modified'] = node.timestamp.rfc822
+        render :text => node.to_xml.to_s, :content_type => "text/xml"
+      else
+        render :nothing => true, :status => :gone
+      end
+    rescue ActiveRecord::RecordNotFound
+      render :nothing => true, :status => :not_found
+    end
+  end
 
   # Update a node from given XML
   def update
index a45ad1e0b3707b07e919169aa4e24d8bf3834e17..286e4055c689d84cd01388bd94d01bad35f11f37 100644 (file)
@@ -10,6 +10,7 @@ ActionController::Routing::Routes.draw do |map|
   map.connect "api/#{API_VERSION}/node/:id/ways", :controller => 'way', :action => 'ways_for_node', :id => /\d+/
   map.connect "api/#{API_VERSION}/node/:id/relations", :controller => 'relation', :action => 'relations_for_node', :id => /\d+/
   map.connect "api/#{API_VERSION}/node/:id/history", :controller => 'old_node', :action => 'history', :id => /\d+/
+  map.connect "api/#{API_VERSION}/node/:id/:version", :controller => 'old_node', :action => 'version', :id => /\d+/, :version => /\d+/
   map.connect "api/#{API_VERSION}/node/:id", :controller => 'node', :action => 'read', :id => /\d+/, :conditions => { :method => :get }
   map.connect "api/#{API_VERSION}/node/:id", :controller => 'node', :action => 'update', :id => /\d+/, :conditions => { :method => :put }
   map.connect "api/#{API_VERSION}/node/:id", :controller => 'node', :action => 'delete', :id => /\d+/, :conditions => { :method => :delete }
@@ -59,7 +60,7 @@ ActionController::Routing::Routes.draw do |map|
   
   # Potlatch API
   
-  map.connect "api/0.5/amf", :controller =>'amf', :action =>'talk'
+  map.connect "api/#{API_VERSION}/amf", :controller =>'amf', :action =>'talk'
   map.connect "api/#{API_VERSION}/amf", :controller =>'amf', :action =>'talk'
   map.connect "api/#{API_VERSION}/swf/trackpoints", :controller =>'swf', :action =>'trackpoints'