Extend API to allow changesets to be queried by ids

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.
This commit is contained in:
Simon Legner 2013-12-05 18:04:47 +00:00 committed by Tom Hughes
parent 0f2958aed4
commit 1d1f194d59
2 changed files with 22 additions and 0 deletions

View 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

View 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
##