debian-mirror-gitlab/app/models/concerns/project_features_compatibility.rb

149 lines
4.6 KiB
Ruby
Raw Normal View History

2018-11-20 20:47:30 +05:30
# frozen_string_literal: true
2018-11-08 19:23:39 +05:30
# Makes api V4 compatible with old project features permissions methods
2016-09-29 09:46:39 +05:30
#
# After migrating issues_enabled merge_requests_enabled builds_enabled snippets_enabled and wiki_enabled
# fields to a new table "project_features", support for the old fields is still needed in the API.
2018-03-17 18:26:18 +05:30
require 'gitlab/utils'
2016-09-29 09:46:39 +05:30
module ProjectFeaturesCompatibility
extend ActiveSupport::Concern
2019-09-30 21:07:59 +05:30
# TODO: remove in API v5, replaced by *_access_level
2016-09-29 09:46:39 +05:30
def wiki_enabled=(value)
2019-09-30 21:07:59 +05:30
write_feature_attribute_boolean(:wiki_access_level, value)
2016-09-29 09:46:39 +05:30
end
2019-09-30 21:07:59 +05:30
# TODO: remove in API v5, replaced by *_access_level
2016-09-29 09:46:39 +05:30
def builds_enabled=(value)
2019-09-30 21:07:59 +05:30
write_feature_attribute_boolean(:builds_access_level, value)
2016-09-29 09:46:39 +05:30
end
2019-09-30 21:07:59 +05:30
# TODO: remove in API v5, replaced by *_access_level
2016-09-29 09:46:39 +05:30
def merge_requests_enabled=(value)
2019-09-30 21:07:59 +05:30
write_feature_attribute_boolean(:merge_requests_access_level, value)
2016-09-29 09:46:39 +05:30
end
2019-09-30 21:07:59 +05:30
# TODO: remove in API v5, replaced by *_access_level
2016-09-29 09:46:39 +05:30
def issues_enabled=(value)
2019-09-30 21:07:59 +05:30
write_feature_attribute_boolean(:issues_access_level, value)
2016-09-29 09:46:39 +05:30
end
2019-09-30 21:07:59 +05:30
# TODO: remove in API v5, replaced by *_access_level
2016-09-29 09:46:39 +05:30
def snippets_enabled=(value)
2019-09-30 21:07:59 +05:30
write_feature_attribute_boolean(:snippets_access_level, value)
end
2021-04-17 20:07:23 +05:30
def security_and_compliance_enabled=(value)
write_feature_attribute_boolean(:security_and_compliance_access_level, value)
end
2019-09-30 21:07:59 +05:30
def repository_access_level=(value)
write_feature_attribute_string(:repository_access_level, value)
end
def wiki_access_level=(value)
write_feature_attribute_string(:wiki_access_level, value)
end
def builds_access_level=(value)
write_feature_attribute_string(:builds_access_level, value)
end
def merge_requests_access_level=(value)
write_feature_attribute_string(:merge_requests_access_level, value)
end
2020-03-13 15:44:24 +05:30
def forking_access_level=(value)
write_feature_attribute_string(:forking_access_level, value)
end
2019-09-30 21:07:59 +05:30
def issues_access_level=(value)
write_feature_attribute_string(:issues_access_level, value)
end
def snippets_access_level=(value)
write_feature_attribute_string(:snippets_access_level, value)
2016-09-29 09:46:39 +05:30
end
2022-07-23 23:45:48 +05:30
def package_registry_access_level=(value)
write_feature_attribute_string(:package_registry_access_level, value)
end
2020-03-13 15:44:24 +05:30
def pages_access_level=(value)
write_feature_attribute_string(:pages_access_level, value)
end
2020-04-22 19:07:51 +05:30
def metrics_dashboard_access_level=(value)
write_feature_attribute_string(:metrics_dashboard_access_level, value)
end
2021-02-22 17:27:13 +05:30
def analytics_access_level=(value)
write_feature_attribute_string(:analytics_access_level, value)
end
def operations_access_level=(value)
write_feature_attribute_string(:operations_access_level, value)
end
2022-10-11 01:57:18 +05:30
def monitor_access_level=(value)
write_feature_attribute_string(:monitor_access_level, value)
end
2021-04-17 20:07:23 +05:30
def security_and_compliance_access_level=(value)
write_feature_attribute_string(:security_and_compliance_access_level, value)
end
def container_registry_access_level=(value)
write_feature_attribute_string(:container_registry_access_level, value)
end
2022-08-27 11:52:29 +05:30
def environments_access_level=(value)
write_feature_attribute_string(:environments_access_level, value)
end
def feature_flags_access_level=(value)
write_feature_attribute_string(:feature_flags_access_level, value)
end
def releases_access_level=(value)
write_feature_attribute_string(:releases_access_level, value)
end
2023-01-13 00:05:48 +05:30
def infrastructure_access_level=(value)
write_feature_attribute_string(:infrastructure_access_level, value)
end
2021-10-27 15:23:28 +05:30
# TODO: Remove this method after we drop support for project create/edit APIs to set the
# container_registry_enabled attribute. They can instead set the container_registry_access_level
# attribute.
def container_registry_enabled=(value)
write_feature_attribute_boolean(:container_registry_access_level, value)
end
2016-09-29 09:46:39 +05:30
private
2019-09-30 21:07:59 +05:30
def write_feature_attribute_boolean(field, value)
2023-03-17 16:20:25 +05:30
value_type = Gitlab::Utils.to_boolean(value)
if value_type.in?([true, false])
access_level = value_type ? ProjectFeature::ENABLED : ProjectFeature::DISABLED
write_feature_attribute_raw(field, access_level)
else
write_feature_attribute_string(field, value)
end
2019-09-30 21:07:59 +05:30
end
def write_feature_attribute_string(field, value)
access_level = ProjectFeature.access_level_from_str(value)
write_feature_attribute_raw(field, access_level)
end
def write_feature_attribute_raw(field, value)
2016-09-29 09:46:39 +05:30
build_project_feature unless project_feature
2019-09-30 21:07:59 +05:30
project_feature.__send__(:write_attribute, field, value) # rubocop:disable GitlabSecurity/PublicSend
2016-09-29 09:46:39 +05:30
end
end
2021-01-29 00:20:46 +05:30
2021-06-08 01:23:25 +05:30
ProjectFeaturesCompatibility.prepend_mod_with('ProjectFeaturesCompatibility')