diff options
author | Zeger-Jan van de Weg <git@zjvandeweg.nl> | 2019-01-07 11:07:14 +0100 |
---|---|---|
committer | Zeger-Jan van de Weg <git@zjvandeweg.nl> | 2019-01-14 14:29:51 +0100 |
commit | 5396594a831de3f467f28c25c5856ba441b07ea7 (patch) | |
tree | 67adf2e591c65446a1d73ac90685e6073f867ad4 /lib/api | |
parent | 604073ffc38f938e36f613c592c444d56c99f49c (diff) | |
download | gitlab-ce-5396594a831de3f467f28c25c5856ba441b07ea7.tar.gz |
Allow setting of feature gates per project
For features the feature gates are sometimes projects, not groups or
users. For example for git object pools:
https://gitlab.com/gitlab-com/gl-infra/infrastructure/issues/5872
This commit allows for setting feature group gates based on projects, by its
path as that seems most convenient.
Diffstat (limited to 'lib/api')
-rw-r--r-- | lib/api/features.rb | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/lib/api/features.rb b/lib/api/features.rb index 1331248699f..835aac05905 100644 --- a/lib/api/features.rb +++ b/lib/api/features.rb @@ -16,15 +16,13 @@ module API end end - # rubocop: disable CodeReuse/ActiveRecord def gate_targets(params) - targets = [] - targets << Feature.group(params[:feature_group]) if params[:feature_group] - targets << UserFinder.new(params[:user]).find_by_username if params[:user] + Feature::Target.new(params).targets + end - targets + def gate_specified?(params) + Feature::Target.new(params).gate_specified? end - # rubocop: enable CodeReuse/ActiveRecord end resource :features do @@ -44,6 +42,7 @@ module API 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' + optional :project, type: String, desc: 'A projects path, like gitlab-org/gitlab-ce' end post ':name' do feature = Feature.get(params[:name]) @@ -52,13 +51,13 @@ module API case value when true - if targets.present? + if gate_specified?(params) targets.each { |target| feature.enable(target) } else feature.enable end when false - if targets.present? + if gate_specified?(params) targets.each { |target| feature.disable(target) } else feature.disable |