93 lines
2 KiB
Ruby
93 lines
2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module FeatureFlags
|
|
class EnableService < BaseService
|
|
def execute
|
|
if feature_flag_by_name
|
|
update_feature_flag
|
|
else
|
|
create_feature_flag
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def create_feature_flag
|
|
::FeatureFlags::CreateService
|
|
.new(project, current_user, create_params)
|
|
.execute
|
|
end
|
|
|
|
def update_feature_flag
|
|
::FeatureFlags::UpdateService
|
|
.new(project, current_user, update_params)
|
|
.execute(feature_flag_by_name)
|
|
end
|
|
|
|
def create_params
|
|
if params[:environment_scope] == '*'
|
|
params_to_create_flag_with_default_scope
|
|
else
|
|
params_to_create_flag_with_additional_scope
|
|
end
|
|
end
|
|
|
|
def update_params
|
|
if feature_flag_scope_by_environment_scope
|
|
params_to_update_scope
|
|
else
|
|
params_to_create_scope
|
|
end
|
|
end
|
|
|
|
def params_to_create_flag_with_default_scope
|
|
{
|
|
name: params[:name],
|
|
scopes_attributes: [
|
|
{
|
|
active: true,
|
|
environment_scope: '*',
|
|
strategies: [params[:strategy]]
|
|
}
|
|
]
|
|
}
|
|
end
|
|
|
|
def params_to_create_flag_with_additional_scope
|
|
{
|
|
name: params[:name],
|
|
scopes_attributes: [
|
|
{
|
|
active: false,
|
|
environment_scope: '*'
|
|
},
|
|
{
|
|
active: true,
|
|
environment_scope: params[:environment_scope],
|
|
strategies: [params[:strategy]]
|
|
}
|
|
]
|
|
}
|
|
end
|
|
|
|
def params_to_create_scope
|
|
{
|
|
scopes_attributes: [{
|
|
active: true,
|
|
environment_scope: params[:environment_scope],
|
|
strategies: [params[:strategy]]
|
|
}]
|
|
}
|
|
end
|
|
|
|
def params_to_update_scope
|
|
{
|
|
scopes_attributes: [{
|
|
id: feature_flag_scope_by_environment_scope.id,
|
|
active: true,
|
|
strategies: feature_flag_scope_by_environment_scope.strategies | [params[:strategy]]
|
|
}]
|
|
}
|
|
end
|
|
end
|
|
end
|