1 class WayController < ApplicationController
 
   5   before_filter :authorize, :only => [:create, :update, :delete]
 
   6   before_filter :require_public_data, :only => [:create, :update, :delete]
 
   7   before_filter :check_api_writable, :only => [:create, :update, :delete]
 
   8   before_filter :check_api_readable, :except => [:create, :update, :delete]
 
   9   after_filter :compress_output
 
  10   around_filter :api_call_handle_error, :api_call_timeout
 
  15     way = Way.from_xml(request.raw_post, true)
 
  18       way.create_with_history @user
 
  19       render :text => way.id.to_s, :content_type => "text/plain"
 
  21       render :nothing => true, :status => :bad_request
 
  26     way = Way.find(params[:id])
 
  28     response.headers['Last-Modified'] = way.timestamp.rfc822
 
  31       render :text => way.to_xml.to_s, :content_type => "text/xml"
 
  33       render :text => "", :status => :gone
 
  38     way = Way.find(params[:id])
 
  39     new_way = Way.from_xml(request.raw_post)
 
  41     if new_way and new_way.id == way.id
 
  42       way.update_from(new_way, @user)
 
  43       render :text => way.version.to_s, :content_type => "text/plain"
 
  45       render :nothing => true, :status => :bad_request
 
  49   # This is the API call to delete a way
 
  51     way = Way.find(params[:id])
 
  52     new_way = Way.from_xml(request.raw_post)
 
  54     if new_way and new_way.id == way.id
 
  55       way.delete_with_history!(new_way, @user)
 
  56       render :text => way.version.to_s, :content_type => "text/plain"
 
  58       render :nothing => true, :status => :bad_request
 
  63     way = Way.find(params[:id])
 
  66       nd_ids = way.nds + [-1]
 
  67       nodes = Node.find(:all, :conditions => ["visible = ? AND id IN (#{nd_ids.join(',')})", true])
 
  70       doc = OSM::API.new.get_xml_doc
 
  72         doc.root << node.to_xml_node()
 
  74       doc.root << way.to_xml_node()
 
  76       render :text => doc.to_s, :content_type => "text/xml"
 
  78       render :text => "", :status => :gone
 
  84       ids = params['ways'].split(',').collect { |w| w.to_i }
 
  90       doc = OSM::API.new.get_xml_doc
 
  92       Way.find(ids).each do |way|
 
  93         doc.root << way.to_xml_node
 
  96       render :text => doc.to_s, :content_type => "text/xml"
 
  98       render :nothing => true, :status => :bad_request
 
 103   # returns all the ways which are currently using the node given in the 
 
 104   # :id parameter. note that this used to return deleted ways as well, but
 
 105   # this seemed not to be the expected behaviour, so it was removed.
 
 107     wayids = WayNode.find(:all, 
 
 108                           :conditions => ['node_id = ?', params[:id]]
 
 109                           ).collect { |ws| ws.id[0] }.uniq
 
 111     doc = OSM::API.new.get_xml_doc
 
 113     Way.find(wayids).each do |way|
 
 114       doc.root << way.to_xml_node if way.visible
 
 117     render :text => doc.to_s, :content_type => "text/xml"