diff options
Diffstat (limited to 'lib/api/feature_flag_scopes.rb')
-rw-r--r-- | lib/api/feature_flag_scopes.rb | 160 |
1 files changed, 0 insertions, 160 deletions
diff --git a/lib/api/feature_flag_scopes.rb b/lib/api/feature_flag_scopes.rb deleted file mode 100644 index 3f3bf4d9f42..00000000000 --- a/lib/api/feature_flag_scopes.rb +++ /dev/null @@ -1,160 +0,0 @@ -# frozen_string_literal: true - -module API - class FeatureFlagScopes < ::API::Base - include PaginationParams - - ENVIRONMENT_SCOPE_ENDPOINT_REQUIREMENTS = FeatureFlags::FEATURE_FLAG_ENDPOINT_REQUIREMENTS - .merge(environment_scope: API::NO_SLASH_URL_PART_REGEX) - - feature_category :feature_flags - - before do - authorize_read_feature_flags! - end - - params do - requires :id, type: String, desc: 'The ID of a project' - end - resource 'projects/:id', requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do - resource :feature_flag_scopes do - desc 'Get all effective feature flags under the environment' do - detail 'This feature was introduced in GitLab 12.5' - success ::API::Entities::FeatureFlag::DetailedLegacyScope - end - params do - requires :environment, type: String, desc: 'The environment name' - end - get do - present scopes_for_environment, with: ::API::Entities::FeatureFlag::DetailedLegacyScope - end - end - - params do - requires :name, type: String, desc: 'The name of the feature flag' - end - resource 'feature_flags/:name', requirements: FeatureFlags::FEATURE_FLAG_ENDPOINT_REQUIREMENTS do - resource :scopes do - desc 'Get all scopes of a feature flag' do - detail 'This feature was introduced in GitLab 12.5' - success ::API::Entities::FeatureFlag::LegacyScope - end - params do - use :pagination - end - get do - present paginate(feature_flag.scopes), with: ::API::Entities::FeatureFlag::LegacyScope - end - - desc 'Create a scope of a feature flag' do - detail 'This feature was introduced in GitLab 12.5' - success ::API::Entities::FeatureFlag::LegacyScope - end - params do - requires :environment_scope, type: String, desc: 'The environment scope of the scope' - requires :active, type: Boolean, desc: 'Whether the scope is active' - requires :strategies, type: JSON, desc: 'The strategies of the scope' - end - post do - authorize_update_feature_flag! - - result = ::FeatureFlags::UpdateService - .new(user_project, current_user, scopes_attributes: [declared_params]) - .execute(feature_flag) - - if result[:status] == :success - present scope, with: ::API::Entities::FeatureFlag::LegacyScope - else - render_api_error!(result[:message], result[:http_status]) - end - end - - params do - requires :environment_scope, type: String, desc: 'URL-encoded environment scope' - end - resource ':environment_scope', requirements: ENVIRONMENT_SCOPE_ENDPOINT_REQUIREMENTS do - desc 'Get a scope of a feature flag' do - detail 'This feature was introduced in GitLab 12.5' - success ::API::Entities::FeatureFlag::LegacyScope - end - get do - present scope, with: ::API::Entities::FeatureFlag::LegacyScope - end - - desc 'Update a scope of a feature flag' do - detail 'This feature was introduced in GitLab 12.5' - success ::API::Entities::FeatureFlag::LegacyScope - end - params do - optional :active, type: Boolean, desc: 'Whether the scope is active' - optional :strategies, type: JSON, desc: 'The strategies of the scope' - end - put do - authorize_update_feature_flag! - - scope_attributes = declared_params.merge(id: scope.id) - - result = ::FeatureFlags::UpdateService - .new(user_project, current_user, scopes_attributes: [scope_attributes]) - .execute(feature_flag) - - if result[:status] == :success - updated_scope = result[:feature_flag].scopes - .find { |scope| scope.environment_scope == params[:environment_scope] } - - present updated_scope, with: ::API::Entities::FeatureFlag::LegacyScope - else - render_api_error!(result[:message], result[:http_status]) - end - end - - desc 'Delete a scope from a feature flag' do - detail 'This feature was introduced in GitLab 12.5' - success ::API::Entities::FeatureFlag::LegacyScope - end - delete do - authorize_update_feature_flag! - - param = { scopes_attributes: [{ id: scope.id, _destroy: true }] } - - result = ::FeatureFlags::UpdateService - .new(user_project, current_user, param) - .execute(feature_flag) - - if result[:status] == :success - status :no_content - else - render_api_error!(result[:message], result[:http_status]) - end - end - end - end - end - end - - helpers do - def authorize_read_feature_flags! - authorize! :read_feature_flag, user_project - end - - def authorize_update_feature_flag! - authorize! :update_feature_flag, feature_flag - end - - def feature_flag - @feature_flag ||= user_project.operations_feature_flags - .find_by_name!(params[:name]) - end - - def scope - @scope ||= feature_flag.scopes - .find_by_environment_scope!(CGI.unescape(params[:environment_scope])) - end - - def scopes_for_environment - Operations::FeatureFlagScope - .for_unleash_client(user_project, params[:environment]) - end - end - end -end |