diff options
| author | Lin Jen-Shin <godfat@godfat.org> | 2017-06-30 13:46:51 +0800 |
|---|---|---|
| committer | Lin Jen-Shin <godfat@godfat.org> | 2017-06-30 13:46:51 +0800 |
| commit | 62fdbbeeb01810f9215a7b8bdf880901fcb48c65 (patch) | |
| tree | 388bee91b591f3110185c103882469ce42b80784 /lib/api | |
| parent | 0d5e6536e7c18d839b1c1da0807aa90ba5be3e06 (diff) | |
| parent | 6bbbc0ba80d98a5479cf1c962835487f73e00ef7 (diff) | |
| download | gitlab-ce-62fdbbeeb01810f9215a7b8bdf880901fcb48c65.tar.gz | |
Merge remote-tracking branch 'upstream/master' into 32815--Add-Custom-CI-Config-Path
* upstream/master: (123 commits)
Backport changes to Projects::IssuesController and the search bar
bugfix: use `require_dependency` to bring in DeclarativePolicy
Resolve "Select branch dropdown is too close to branch name"
Clean up issuable lists
Defer project destroys within a namespace in Groups::DestroyService#async_execute
Fixed new navgiation bar logo height in Safari
Resolve "Issue dropdown persists when adding issue number to issue description"
Move verification to block level instead of paragraph
Revert "Merge branch 'dm-drop-default-scope-on-sortable-finders' into 'master'"
Added code for defining SHA attributes
Minor edits
Job details won't scroll horizontally to show long lines
Run mysql tests on stable preperation branches like 9-3-stable-patch-2
Bring back branches badge to main project page
optimize translation content based on comments
supplement traditional chinese in taiwan translation
Inserts exact matches of username, email and name to the top of the user search list
Remove Namespace model default scope override and write additional test to Project search
optimize translation content based on comments
Limit OpenGraph image size to 64x64
...
Diffstat (limited to 'lib/api')
| -rw-r--r-- | lib/api/entities.rb | 10 | ||||
| -rw-r--r-- | lib/api/features.rb | 39 | ||||
| -rw-r--r-- | lib/api/helpers/runner.rb | 3 | ||||
| -rw-r--r-- | lib/api/namespaces.rb | 2 | ||||
| -rw-r--r-- | lib/api/projects.rb | 4 |
5 files changed, 49 insertions, 9 deletions
diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 980b391c155..4ab264a3b98 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -445,7 +445,15 @@ module API end class Namespace < Grape::Entity - expose :id, :name, :path, :kind, :full_path + expose :id, :name, :path, :kind, :full_path, :parent_id + + expose :members_count_with_descendants, if: -> (namespace, opts) { expose_members_count_with_descendants?(namespace, opts) } do |namespace, _| + namespace.users_with_descendants.count + end + + def expose_members_count_with_descendants?(namespace, opts) + namespace.kind == 'group' && Ability.allowed?(opts[:current_user], :admin_group, namespace) + end end class MemberAccess < Grape::Entity diff --git a/lib/api/features.rb b/lib/api/features.rb index cff0ba2ddff..21745916463 100644 --- a/lib/api/features.rb +++ b/lib/api/features.rb @@ -2,6 +2,29 @@ module API class Features < Grape::API before { authenticated_as_admin! } + helpers do + def gate_value(params) + case params[:value] + when 'true' + true + when '0', 'false' + false + else + params[:value].to_i + end + end + + def gate_target(params) + if params[:feature_group] + Feature.group(params[:feature_group]) + elsif params[:user] + User.find_by_username(params[:user]) + else + gate_value(params) + end + end + end + resource :features do desc 'Get a list of all features' do success Entities::Feature @@ -17,16 +40,22 @@ module API end params do requires :value, type: String, desc: '`true` or `false` to enable/disable, an integer for percentage of time' + optional :feature_group, type: String, desc: 'A Feature group name' + optional :user, type: String, desc: 'A GitLab username' + mutually_exclusive :feature_group, :user end post ':name' do feature = Feature.get(params[:name]) + target = gate_target(params) + value = gate_value(params) - if %w(0 false).include?(params[:value]) - feature.disable - elsif params[:value] == 'true' - feature.enable + case value + when true + feature.enable(target) + when false + feature.disable(target) else - feature.enable_percentage_of_time(params[:value].to_i) + feature.enable_percentage_of_time(value) end present feature, with: Entities::Feature, current_user: current_user diff --git a/lib/api/helpers/runner.rb b/lib/api/helpers/runner.rb index 1369b021ea4..f8645e364ce 100644 --- a/lib/api/helpers/runner.rb +++ b/lib/api/helpers/runner.rb @@ -46,7 +46,8 @@ module API yield if block_given? - forbidden!('Project has been deleted!') unless job.project + project = job.project + forbidden!('Project has been deleted!') if project.nil? || project.pending_delete? forbidden!('Job has been erased!') if job.erased? end diff --git a/lib/api/namespaces.rb b/lib/api/namespaces.rb index 30761cb9b55..f1eaff6b0eb 100644 --- a/lib/api/namespaces.rb +++ b/lib/api/namespaces.rb @@ -17,7 +17,7 @@ module API namespaces = namespaces.search(params[:search]) if params[:search].present? - present paginate(namespaces), with: Entities::Namespace + present paginate(namespaces), with: Entities::Namespace, current_user: current_user end end end diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 20707e97e53..a781869fc19 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -1,3 +1,5 @@ +require_dependency 'declarative_policy' + module API # Projects API class Projects < Grape::API @@ -397,7 +399,7 @@ module API use :pagination end get ':id/users' do - users = user_project.team.users + users = DeclarativePolicy.subject_scope { user_project.team.users } users = users.search(params[:search]) if params[:search].present? present paginate(users), with: Entities::UserBasic |
