project_features_compatibility.rb 2.4 KB
Newer Older
1 2
# frozen_string_literal: true

3
# Makes api V4 compatible with old project features permissions methods
F
Felipe Artur 已提交
4 5 6
#
# 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.
7
require 'gitlab/utils'
F
Felipe Artur 已提交
8 9 10 11

module ProjectFeaturesCompatibility
  extend ActiveSupport::Concern

12
  # TODO: remove in API v5, replaced by *_access_level
F
Felipe Artur 已提交
13
  def wiki_enabled=(value)
14
    write_feature_attribute_boolean(:wiki_access_level, value)
F
Felipe Artur 已提交
15 16
  end

17
  # TODO: remove in API v5, replaced by *_access_level
F
Felipe Artur 已提交
18
  def builds_enabled=(value)
19
    write_feature_attribute_boolean(:builds_access_level, value)
F
Felipe Artur 已提交
20 21
  end

22
  # TODO: remove in API v5, replaced by *_access_level
F
Felipe Artur 已提交
23
  def merge_requests_enabled=(value)
24
    write_feature_attribute_boolean(:merge_requests_access_level, value)
F
Felipe Artur 已提交
25 26
  end

27
  # TODO: remove in API v5, replaced by *_access_level
F
Felipe Artur 已提交
28
  def issues_enabled=(value)
29
    write_feature_attribute_boolean(:issues_access_level, value)
F
Felipe Artur 已提交
30 31
  end

32
  # TODO: remove in API v5, replaced by *_access_level
F
Felipe Artur 已提交
33
  def snippets_enabled=(value)
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
    write_feature_attribute_boolean(:snippets_access_level, value)
  end

  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

  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)
F
Felipe Artur 已提交
59 60 61 62
  end

  private

63 64 65 66 67 68 69 70 71 72 73
  def write_feature_attribute_boolean(field, value)
    access_level = Gitlab::Utils.to_boolean(value) ? ProjectFeature::ENABLED : ProjectFeature::DISABLED
    write_feature_attribute_raw(field, access_level)
  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)
F
Felipe Artur 已提交
74 75
    build_project_feature unless project_feature

76
    project_feature.__send__(:write_attribute, field, value) # rubocop:disable GitlabSecurity/PublicSend
F
Felipe Artur 已提交
77 78
  end
end