94 lines
2 KiB
Ruby
94 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
|