Extend API to allow changesets to be queried by ids
authorSimon Legner <Simon.Legner@gmail.com>
Thu, 5 Dec 2013 18:04:47 +0000 (18:04 +0000)
committerTom Hughes <tom@compton.nu>
Thu, 5 Dec 2013 18:06:35 +0000 (18:06 +0000)
Make changesets queryable by specifying a list of ids, for example:

    /api/0.6/changesets?changesets=1,2,3

This condition may be combined with others in the normal way.

app/controllers/changeset_controller.rb
test/functional/changeset_controller_test.rb

index d34eb873938f648bbb1e59b7575f283bf3aa6011..735fa73a88c31a1820515aa9e4677011946be8b3 100644 (file)
@@ -210,6 +210,7 @@ class ChangesetController < ApplicationController
     changesets = conditions_time(changesets, params['time'])
     changesets = conditions_open(changesets, params['open'])
     changesets = conditions_closed(changesets, params['closed'])
+    changesets = conditions_ids(changesets, params['changesets'])
 
     # create the results document
     results = OSM::API.new.get_xml_doc
@@ -413,6 +414,20 @@ private
     end
   end
 
+  ##
+  # query changesets by a list of ids
+  # (either specified as array or comma-separated string)
+  def conditions_ids(changesets, ids)
+    if ids.nil?
+      return changesets
+    elsif ids.empty?
+      raise OSM::APIBadUserInput.new("No changesets were given to search for")
+    else
+      ids = ids.split(',').collect { |n| n.to_i }
+      return changesets.where(:id => ids)
+    end
+  end
+
   ##
   # eliminate empty changesets (where the bbox has not been set)
   # this should be applied to all changeset list displays
index 09c31615205184ce3a230b65db39f0f8f67cb440..724a5749de659808e00fa3835b313525e56e5431 100644 (file)
@@ -1543,6 +1543,13 @@ EOF
     get :query, :closed => 'true', :user => users(:public_user).id
     assert_response :success, "can't get changesets by closed-ness and user"
     assert_changesets [7]
+
+    get :query, :changesets => '1,2,3'
+    assert_response :success, "can't get changesets by id (as comma-separated string)"
+    assert_changesets [1,2,3]
+
+    get :query, :changesets => ''
+    assert_response :bad_request, "should be a bad request since changesets is empty"
   end
 
   ##