Make the multi-get calls throw 400 errors on invalid input
authorPaul Norman <penorman@mac.com>
Sat, 3 Aug 2013 10:20:46 +0000 (03:20 -0700)
committerTom Hughes <tom@compton.nu>
Sun, 4 Aug 2013 09:54:45 +0000 (10:54 +0100)
Also refactor ways and relations to use the same structure as nodes

app/controllers/node_controller.rb
app/controllers/relation_controller.rb
app/controllers/way_controller.rb

index a172b2dd79bc698c5981af26cafa7fee4fd5c687..1e34bc10d507c5cec1874137dd7c13fe5431a718 100644 (file)
@@ -64,6 +64,10 @@ class NodeController < ApplicationController
 
   # Dump the details on many nodes whose ids are given in the "nodes" parameter.
   def nodes
+    if not params['nodes']
+      raise OSM::APIBadUserInput.new("The parameter nodes is required, and must be of the form nodes=id[,id[,id...]]")
+    end
+
     ids = params['nodes'].split(',').collect { |n| n.to_i }
 
     if ids.length == 0
index 39021218fb00811e4047f45c1f4c0172e0f9164a..9e7466a4ad4f7506b5d165e4584e33aa5424ff87 100644 (file)
@@ -130,19 +130,23 @@ class RelationController < ApplicationController
   end
 
   def relations
+    if not params['relations']
+      raise OSM::APIBadUserInput.new("The parameter relations is required, and must be of the form relations=id[,id[,id...]]")
+    end
+
     ids = params['relations'].split(',').collect { |w| w.to_i }
 
-    if ids.length > 0
-      doc = OSM::API.new.get_xml_doc
+    if ids.length == 0
+      raise OSM::APIBadUserInput.new("No relations were given to search for")
+    end
 
-      Relation.find(ids).each do |relation|
-        doc.root << relation.to_xml_node
-      end
+    doc = OSM::API.new.get_xml_doc
 
-      render :text => doc.to_s, :content_type => "text/xml"
-    else
-      render :text => "You need to supply a comma separated list of ids.", :status => :bad_request
+    Relation.find(ids).each do |relation|
+      doc.root << relation.to_xml_node
     end
+
+    render :text => doc.to_s, :content_type => "text/xml"
   end
 
   def relations_for_way
index 6ea27deafa2a24a2226efaf7deb3cdb30a8e0b9c..2ce49b7e84fd9693216646bd53c5228dc14551bb 100644 (file)
@@ -84,23 +84,23 @@ class WayController < ApplicationController
   end
 
   def ways
-    begin
-      ids = params['ways'].split(',').collect { |w| w.to_i }
-    rescue
-      ids = []
+    if not params['ways']
+      raise OSM::APIBadUserInput.new("The parameter ways is required, and must be of the form ways=id[,id[,id...]]")
     end
 
-    if ids.length > 0
-      doc = OSM::API.new.get_xml_doc
+    ids = params['ways'].split(',').collect { |w| w.to_i }
 
-      Way.find(ids).each do |way|
-        doc.root << way.to_xml_node
-      end
+    if ids.length == 0
+      raise OSM::APIBadUserInput.new("No ways were given to search for")
+    end
 
-      render :text => doc.to_s, :content_type => "text/xml"
-    else
-      render :text => "", :status => :bad_request
+    doc = OSM::API.new.get_xml_doc
+
+    Way.find(ids).each do |way|
+      doc.root << way.to_xml_node
     end
+
+    render :text => doc.to_s, :content_type => "text/xml"
   end
 
   ##