Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToon Claes <toon@gitlab.com>2017-05-26 17:31:37 +0300
committerToon Claes <toon@gitlab.com>2017-05-30 23:45:59 +0300
commitdb679788e46d55984a4af71034c6db11aed919e4 (patch)
treed6fdb9d57f5156e9be56b0f583ff1a4d7c76fa57
parent5654ac877df5b6007606e0e1827d965bdf8e552b (diff)
Add :owned param to ProjectFinder
And use it in the API.
-rw-r--r--app/finders/projects_finder.rb9
-rw-r--r--lib/api/groups.rb2
-rw-r--r--lib/api/helpers.rb7
-rw-r--r--lib/api/projects.rb2
-rw-r--r--spec/finders/projects_finder_spec.rb7
5 files changed, 18 insertions, 9 deletions
diff --git a/app/finders/projects_finder.rb b/app/finders/projects_finder.rb
index 866d95ea1d7..5bf722d1ec6 100644
--- a/app/finders/projects_finder.rb
+++ b/app/finders/projects_finder.rb
@@ -7,6 +7,7 @@
# project_ids_relation: int[] - project ids to use
# params:
# trending: boolean
+# owned: boolean
# non_public: boolean
# starred: boolean
# sort: string
@@ -47,8 +48,12 @@ class ProjectsFinder < UnionFinder
def init_collection
projects = []
- projects << current_user.authorized_projects if current_user
- projects << Project.unscoped.public_to_user(current_user) unless params[:non_public].present?
+ if params[:owned].present?
+ projects << current_user.owned_projects if current_user
+ else
+ projects << current_user.authorized_projects if current_user
+ projects << Project.unscoped.public_to_user(current_user) unless params[:non_public].present?
+ end
projects
end
diff --git a/lib/api/groups.rb b/lib/api/groups.rb
index aacc3356a0e..e14a988a153 100644
--- a/lib/api/groups.rb
+++ b/lib/api/groups.rb
@@ -152,7 +152,7 @@ module API
get ":id/projects" do
group = find_group!(params[:id])
projects = GroupProjectsFinder.new(group: group, current_user: current_user, params: project_finder_params).execute
- projects = filter_projects(projects)
+ projects = reorder_projects(projects)
entity = params[:simple] ? Entities::BasicProjectDetails : Entities::Project
present paginate(projects), with: entity, current_user: current_user
end
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index 17f57cfb8d7..d61450f8258 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -256,16 +256,13 @@ module API
# project helpers
- def filter_projects(projects)
- if params[:owned]
- projects = projects.merge(current_user.owned_projects)
- end
-
+ def reorder_projects(projects)
projects.reorder(params[:order_by] => params[:sort])
end
def project_finder_params
finder_params = {}
+ finder_params[:owned] = true if params[:owned].present?
finder_params[:non_public] = true if params[:membership].present?
finder_params[:starred] = true if params[:starred].present?
finder_params[:visibility_level] = Gitlab::VisibilityLevel.level_value(params[:visibility]) if params[:visibility]
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index 267dd2a74d7..1356f959e70 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -69,7 +69,7 @@ module API
def present_projects(options = {})
projects = ProjectsFinder.new(current_user: current_user, params: project_finder_params).execute
- projects = filter_projects(projects)
+ projects = reorder_projects(projects)
projects = projects.with_statistics if params[:statistics]
projects = projects.with_issues_enabled if params[:with_issues_enabled]
projects = projects.with_merge_requests_enabled if params[:with_merge_requests_enabled]
diff --git a/spec/finders/projects_finder_spec.rb b/spec/finders/projects_finder_spec.rb
index 077f2624388..03d98459e8c 100644
--- a/spec/finders/projects_finder_spec.rb
+++ b/spec/finders/projects_finder_spec.rb
@@ -137,6 +137,13 @@ describe ProjectsFinder do
it { is_expected.to eq([public_project]) }
end
+ describe 'filter by owned' do
+ let(:params) { { owned: true } }
+ let!(:owned_project) { create(:empty_project, :private, namespace: current_user.namespace) }
+
+ it { is_expected.to eq([owned_project]) }
+ end
+
describe 'filter by non_public' do
let(:params) { { non_public: true } }
before do