From 1d1f194d598e54a5d6fb4f38fb569d4138af0dc8 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Thu, 5 Dec 2013 18:04:47 +0000 Subject: [PATCH] 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. --- app/controllers/changeset_controller.rb | 15 +++++++++++++++ test/functional/changeset_controller_test.rb | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index d34eb8739..735fa73a8 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -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 diff --git a/test/functional/changeset_controller_test.rb b/test/functional/changeset_controller_test.rb index 09c316152..724a5749d 100644 --- a/test/functional/changeset_controller_test.rb +++ b/test/functional/changeset_controller_test.rb @@ -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 ## -- 2.39.5