From 6b507219465e50ceff726535f92b75fa9567906d Mon Sep 17 00:00:00 2001 From: Stephan van Leeuwen Date: Fri, 19 Dec 2014 13:27:27 +0100 Subject: Updated projects api to allow ordering Added support for order_by and sort parameters, to sort the projects by the specified values. Updated projects api documentation including the order_by and sort parameters --- lib/api/projects.rb | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) (limited to 'lib/api') diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 7fcf97d1ad6..2b6ec5e1b94 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -23,6 +23,19 @@ module API get do @projects = current_user.authorized_projects + sort = case params["sort"] + when 'desc' then 'DESC' + else 'ASC' + end + + @projects = case params["order_by"] + when 'id' then @projects.reorder("id #{sort}") + when 'name' then @projects.reorder("name #{sort}") + when 'created_at' then @projects.reorder("created_at #{sort}") + when 'last_activity_at' then @projects.reorder("last_activity_at #{sort}") + else @projects + end + # If the archived parameter is passed, limit results accordingly if params[:archived].present? @projects = @projects.where(archived: parse_boolean(params[:archived])) @@ -37,7 +50,21 @@ module API # Example Request: # GET /projects/owned get '/owned' do - @projects = paginate current_user.owned_projects + sort = case params["sort"] + when 'desc' then 'DESC' + else 'ASC' + end + + @projects = current_user.owned_projects + @projects = case params["order_by"] + when 'id' then @projects.reorder("id #{sort}") + when 'name' then @projects.reorder("name #{sort}") + when 'created_at' then @projects.reorder("created_at #{sort}") + when 'last_activity_at' then @projects.reorder("last_activity_at #{sort}") + else @projects + end + + @projects = paginate @projects present @projects, with: Entities::Project end @@ -47,7 +74,21 @@ module API # GET /projects/all get '/all' do authenticated_as_admin! - @projects = paginate Project + + sort = case params["sort"] + when 'desc' then 'DESC' + else 'ASC' + end + + @projects = case params["order_by"] + when 'id' then Project.order("id #{sort}") + when 'name' then Project.order("name #{sort}") + when 'created_at' then Project.order("created_at #{sort}") + when 'last_activity_at' then Project.order("last_activity_at #{sort}") + else Project + end + + @projects = paginate @projects present @projects, with: Entities::Project end @@ -227,6 +268,20 @@ module API ids = current_user.authorized_projects.map(&:id) visibility_levels = [ Gitlab::VisibilityLevel::INTERNAL, Gitlab::VisibilityLevel::PUBLIC ] projects = Project.where("(id in (?) OR visibility_level in (?)) AND (name LIKE (?))", ids, visibility_levels, "%#{params[:query]}%") + + sort = case params["sort"] + when 'desc' then 'DESC' + else 'ASC' + end + + projects = case params["order_by"] + when 'id' then projects.order("id #{sort}") + when 'name' then projects.order("name #{sort}") + when 'created_at' then projects.order("created_at #{sort}") + when 'last_activity_at' then projects.order("last_activity_at #{sort}") + else projects + end + present paginate(projects), with: Entities::Project end -- cgit v1.2.1 From 6af34b0f71898f4a93473584a40cdea6e075e92b Mon Sep 17 00:00:00 2001 From: Stephan van Leeuwen Date: Fri, 19 Dec 2014 19:26:19 +0100 Subject: Changed setting the sort variable Changed from using cases to set the sort variable, to use a one line if/else statement --- lib/api/projects.rb | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) (limited to 'lib/api') diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 2b6ec5e1b94..c5f57b9f8da 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -22,11 +22,7 @@ module API # GET /projects get do @projects = current_user.authorized_projects - - sort = case params["sort"] - when 'desc' then 'DESC' - else 'ASC' - end + sort = params[:sort] == 'desc' ? 'desc' : 'asc' @projects = case params["order_by"] when 'id' then @projects.reorder("id #{sort}") @@ -50,11 +46,7 @@ module API # Example Request: # GET /projects/owned get '/owned' do - sort = case params["sort"] - when 'desc' then 'DESC' - else 'ASC' - end - + sort = params[:sort] == 'desc' ? 'desc' : 'asc' @projects = current_user.owned_projects @projects = case params["order_by"] when 'id' then @projects.reorder("id #{sort}") @@ -74,11 +66,7 @@ module API # GET /projects/all get '/all' do authenticated_as_admin! - - sort = case params["sort"] - when 'desc' then 'DESC' - else 'ASC' - end + sort = params[:sort] == 'desc' ? 'desc' : 'asc' @projects = case params["order_by"] when 'id' then Project.order("id #{sort}") @@ -268,11 +256,7 @@ module API ids = current_user.authorized_projects.map(&:id) visibility_levels = [ Gitlab::VisibilityLevel::INTERNAL, Gitlab::VisibilityLevel::PUBLIC ] projects = Project.where("(id in (?) OR visibility_level in (?)) AND (name LIKE (?))", ids, visibility_levels, "%#{params[:query]}%") - - sort = case params["sort"] - when 'desc' then 'DESC' - else 'ASC' - end + sort = params[:sort] == 'desc' ? 'desc' : 'asc' projects = case params["order_by"] when 'id' then projects.order("id #{sort}") -- cgit v1.2.1 From 180fda3d0a911724bdd15a7b2d5aeee444054d10 Mon Sep 17 00:00:00 2001 From: Stephan van Leeuwen Date: Mon, 22 Dec 2014 13:48:00 +0100 Subject: Updated indentation on case when statements. --- lib/api/projects.rb | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'lib/api') diff --git a/lib/api/projects.rb b/lib/api/projects.rb index c5f57b9f8da..d6dd03656a6 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -25,11 +25,11 @@ module API sort = params[:sort] == 'desc' ? 'desc' : 'asc' @projects = case params["order_by"] - when 'id' then @projects.reorder("id #{sort}") - when 'name' then @projects.reorder("name #{sort}") - when 'created_at' then @projects.reorder("created_at #{sort}") - when 'last_activity_at' then @projects.reorder("last_activity_at #{sort}") - else @projects + when 'id' then @projects.reorder("id #{sort}") + when 'name' then @projects.reorder("name #{sort}") + when 'created_at' then @projects.reorder("created_at #{sort}") + when 'last_activity_at' then @projects.reorder("last_activity_at #{sort}") + else @projects end # If the archived parameter is passed, limit results accordingly @@ -49,11 +49,11 @@ module API sort = params[:sort] == 'desc' ? 'desc' : 'asc' @projects = current_user.owned_projects @projects = case params["order_by"] - when 'id' then @projects.reorder("id #{sort}") - when 'name' then @projects.reorder("name #{sort}") - when 'created_at' then @projects.reorder("created_at #{sort}") - when 'last_activity_at' then @projects.reorder("last_activity_at #{sort}") - else @projects + when 'id' then @projects.reorder("id #{sort}") + when 'name' then @projects.reorder("name #{sort}") + when 'created_at' then @projects.reorder("created_at #{sort}") + when 'last_activity_at' then @projects.reorder("last_activity_at #{sort}") + else @projects end @projects = paginate @projects @@ -69,11 +69,11 @@ module API sort = params[:sort] == 'desc' ? 'desc' : 'asc' @projects = case params["order_by"] - when 'id' then Project.order("id #{sort}") - when 'name' then Project.order("name #{sort}") - when 'created_at' then Project.order("created_at #{sort}") - when 'last_activity_at' then Project.order("last_activity_at #{sort}") - else Project + when 'id' then Project.order("id #{sort}") + when 'name' then Project.order("name #{sort}") + when 'created_at' then Project.order("created_at #{sort}") + when 'last_activity_at' then Project.order("last_activity_at #{sort}") + else Project end @projects = paginate @projects @@ -259,11 +259,11 @@ module API sort = params[:sort] == 'desc' ? 'desc' : 'asc' projects = case params["order_by"] - when 'id' then projects.order("id #{sort}") - when 'name' then projects.order("name #{sort}") - when 'created_at' then projects.order("created_at #{sort}") - when 'last_activity_at' then projects.order("last_activity_at #{sort}") - else projects + when 'id' then projects.order("id #{sort}") + when 'name' then projects.order("name #{sort}") + when 'created_at' then projects.order("created_at #{sort}") + when 'last_activity_at' then projects.order("last_activity_at #{sort}") + else projects end present paginate(projects), with: Entities::Project -- cgit v1.2.1