Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/project_feature.rb')
-rw-r--r--app/models/project_feature.rb65
1 files changed, 38 insertions, 27 deletions
diff --git a/app/models/project_feature.rb b/app/models/project_feature.rb
index 11f4a3f3b6f..168646bbe41 100644
--- a/app/models/project_feature.rb
+++ b/app/models/project_feature.rb
@@ -63,32 +63,23 @@ class ProjectFeature < ApplicationRecord
validate :repository_children_level
- default_value_for :builds_access_level, value: ENABLED, allows_nil: false
- default_value_for :issues_access_level, value: ENABLED, allows_nil: false
- default_value_for :forking_access_level, value: ENABLED, allows_nil: false
- default_value_for :merge_requests_access_level, value: ENABLED, allows_nil: false
- default_value_for :snippets_access_level, value: ENABLED, allows_nil: false
- default_value_for :wiki_access_level, value: ENABLED, allows_nil: false
- default_value_for :repository_access_level, value: ENABLED, allows_nil: false
- default_value_for :analytics_access_level, value: ENABLED, allows_nil: false
- default_value_for :metrics_dashboard_access_level, value: PRIVATE, allows_nil: false
- default_value_for :operations_access_level, value: ENABLED, allows_nil: false
- default_value_for :security_and_compliance_access_level, value: PRIVATE, allows_nil: false
- default_value_for :monitor_access_level, value: ENABLED, allows_nil: false
- default_value_for :infrastructure_access_level, value: ENABLED, allows_nil: false
- default_value_for :feature_flags_access_level, value: ENABLED, allows_nil: false
- default_value_for :environments_access_level, value: ENABLED, allows_nil: false
- default_value_for :releases_access_level, value: ENABLED, allows_nil: false
-
- default_value_for(:pages_access_level, allows_nil: false) do |feature|
- if ::Gitlab::Pages.access_control_is_forced?
- PRIVATE
- else
- feature.project&.public? ? ENABLED : PRIVATE
- end
- end
-
- default_value_for(:package_registry_access_level) do |feature|
+ attribute :builds_access_level, default: ENABLED
+ attribute :issues_access_level, default: ENABLED
+ attribute :forking_access_level, default: ENABLED
+ attribute :merge_requests_access_level, default: ENABLED
+ attribute :snippets_access_level, default: ENABLED
+ attribute :wiki_access_level, default: ENABLED
+ attribute :repository_access_level, default: ENABLED
+ attribute :analytics_access_level, default: ENABLED
+ attribute :metrics_dashboard_access_level, default: PRIVATE
+ attribute :operations_access_level, default: ENABLED
+ attribute :security_and_compliance_access_level, default: PRIVATE
+ attribute :monitor_access_level, default: ENABLED
+ attribute :infrastructure_access_level, default: ENABLED
+ attribute :feature_flags_access_level, default: ENABLED
+ attribute :environments_access_level, default: ENABLED
+
+ attribute :package_registry_access_level, default: -> do
if ::Gitlab.config.packages.enabled
ENABLED
else
@@ -96,7 +87,7 @@ class ProjectFeature < ApplicationRecord
end
end
- default_value_for(:container_registry_access_level) do |feature|
+ attribute :container_registry_access_level, default: -> do
if gitlab_config_features.container_registry
ENABLED
else
@@ -104,6 +95,9 @@ class ProjectFeature < ApplicationRecord
end
end
+ after_initialize :set_pages_access_level, if: :new_record?
+ after_initialize :set_default_values, unless: :new_record?
+
# "enabled" here means "not disabled". It includes private features!
scope :with_feature_enabled, ->(feature) {
feature_access_level_attribute = arel_table[access_level_attribute(feature)]
@@ -170,6 +164,23 @@ class ProjectFeature < ApplicationRecord
private
+ def set_pages_access_level
+ self.pages_access_level ||= if ::Gitlab::Pages.access_control_is_forced?
+ PRIVATE
+ else
+ self.project&.public? ? ENABLED : PRIVATE
+ end
+ end
+
+ def set_default_values
+ self.class.column_names.each do |column_name|
+ next unless has_attribute?(column_name)
+ next unless read_attribute(column_name).nil?
+
+ write_attribute(column_name, self.class.column_defaults[column_name])
+ end
+ end
+
# Validates builds and merge requests access level
# which cannot be higher than repository access level
def repository_children_level