diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-12-29 16:10:17 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-12-29 16:10:17 +0000 |
commit | 71ae8570fcefff809bdd1bc293d6d2d68e83b573 (patch) | |
tree | edf87eadd9f9d3583770ed8f83f00e415ae7873f /lib/api | |
parent | 75043a9eba557d1fe31d81dc30bd979af321e907 (diff) | |
parent | 23e83a6a99d1e79c0d81281b2bde5680bbfe5f3d (diff) | |
download | gitlab-ce-71ae8570fcefff809bdd1bc293d6d2d68e83b573.tar.gz |
Merge branch 'project-ordering' into 'master'
API: Project ordering
Added support for ordering and sorting projects by id, name, created_at or last_activity_at fields.
When the order_by parameter is passed the projects will be ordered by the appropriate field, when the parameter is not passed the original ordering will apply.
the sort parameter will default to ASC, and will only be DESC if the sort parameter is desc
See merge request !266
Diffstat (limited to 'lib/api')
-rw-r--r-- | lib/api/projects.rb | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 7fcf97d1ad6..d6dd03656a6 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -22,6 +22,15 @@ module API # GET /projects get do @projects = current_user.authorized_projects + 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 + end # If the archived parameter is passed, limit results accordingly if params[:archived].present? @@ -37,7 +46,17 @@ module API # Example Request: # GET /projects/owned get '/owned' do - @projects = paginate current_user.owned_projects + 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 + end + + @projects = paginate @projects present @projects, with: Entities::Project end @@ -47,7 +66,17 @@ module API # GET /projects/all get '/all' do authenticated_as_admin! - @projects = paginate Project + 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 + end + + @projects = paginate @projects present @projects, with: Entities::Project end @@ -227,6 +256,16 @@ 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 = 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 + end + present paginate(projects), with: Entities::Project end |