Module: Gitlab::VisibilityLevel
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/gitlab/visibility_level.rb
Constant Summary collapse
- PRIVATE =
0
- INTERNAL =
10
- PUBLIC =
20
Class Method Summary collapse
- .allowed_for?(user, level) ⇒ Boolean
-
.allowed_level?(level) ⇒ Boolean
Level should be a numeric value, e.g.
- .allowed_levels ⇒ Object
- .closest_allowed_level(target_level) ⇒ Object
- .level_name(level) ⇒ Object
- .level_value(level, fallback_value: PRIVATE) ⇒ Object
- .levels_for_user(user = nil) ⇒ Object
- .non_restricted_level?(level) ⇒ Boolean
- .options ⇒ Object
- .public_visibility_restricted? ⇒ Boolean
- .restricted_level?(level) ⇒ Boolean
- .string_level(level) ⇒ Object
- .string_options ⇒ Object
- .string_values ⇒ Object
- .valid_level?(level) ⇒ Boolean
Instance Method Summary collapse
- #internal? ⇒ Boolean
- #private? ⇒ Boolean
- #public? ⇒ Boolean
- #visibility ⇒ Object
- #visibility=(level) ⇒ Object
- #visibility_attribute_present?(attributes) ⇒ Boolean
- #visibility_attribute_value(attributes) ⇒ Object
- #visibility_level_attributes ⇒ Object
- #visibility_level_previous_changes ⇒ Object
- #visibility_level_value ⇒ Object
Class Method Details
.allowed_for?(user, level) ⇒ Boolean
77 78 79 |
# File 'lib/gitlab/visibility_level.rb', line 77 def allowed_for?(user, level) user.admin? || allowed_level?(level.to_i) end |
.allowed_level?(level) ⇒ Boolean
Level should be a numeric value, e.g. ‘20` Return true if the specified level is allowed for the current user.
83 84 85 |
# File 'lib/gitlab/visibility_level.rb', line 83 def allowed_level?(level) valid_level?(level) && non_restricted_level?(level) end |
.allowed_levels ⇒ Object
64 65 66 67 68 |
# File 'lib/gitlab/visibility_level.rb', line 64 def allowed_levels restricted_levels = Gitlab::CurrentSettings.restricted_visibility_levels self.values - Array(restricted_levels) end |
.closest_allowed_level(target_level) ⇒ Object
70 71 72 73 74 75 |
# File 'lib/gitlab/visibility_level.rb', line 70 def closest_allowed_level(target_level) highest_allowed_level = allowed_levels.select { |level| level <= target_level }.max # If all levels are restricted, fall back to PRIVATE highest_allowed_level || PRIVATE end |
.level_name(level) ⇒ Object
109 110 111 |
# File 'lib/gitlab/visibility_level.rb', line 109 def level_name(level) .key(level.to_i) || s_('VisibilityLevel|Unknown') end |
.level_value(level, fallback_value: PRIVATE) ⇒ Object
113 114 115 116 117 |
# File 'lib/gitlab/visibility_level.rb', line 113 def level_value(level, fallback_value: PRIVATE) return level.to_i if level.to_i.to_s == level.to_s && .key(level.to_i) [level] || fallback_value end |
.levels_for_user(user = nil) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/gitlab/visibility_level.rb', line 32 def levels_for_user(user = nil) return [PUBLIC] unless user if user.can_read_all_resources? [PRIVATE, INTERNAL, PUBLIC] elsif user.external? [PUBLIC] else [INTERNAL, PUBLIC] end end |
.non_restricted_level?(level) ⇒ Boolean
87 88 89 |
# File 'lib/gitlab/visibility_level.rb', line 87 def non_restricted_level?(level) !restricted_level?(level) end |
.options ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/gitlab/visibility_level.rb', line 48 def { s_('VisibilityLevel|Private') => PRIVATE, s_('VisibilityLevel|Internal') => INTERNAL, s_('VisibilityLevel|Public') => PUBLIC } end |
.public_visibility_restricted? ⇒ Boolean
101 102 103 |
# File 'lib/gitlab/visibility_level.rb', line 101 def public_visibility_restricted? restricted_level?(PUBLIC) end |
.restricted_level?(level) ⇒ Boolean
91 92 93 94 95 96 97 98 99 |
# File 'lib/gitlab/visibility_level.rb', line 91 def restricted_level?(level) restricted_levels = Gitlab::CurrentSettings.restricted_visibility_levels if restricted_levels.nil? false else restricted_levels.include?(level) end end |
.string_level(level) ⇒ Object
119 120 121 |
# File 'lib/gitlab/visibility_level.rb', line 119 def string_level(level) .key(level) end |
.string_options ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/gitlab/visibility_level.rb', line 56 def { 'private' => PRIVATE, 'internal' => INTERNAL, 'public' => PUBLIC } end |
.string_values ⇒ Object
44 45 46 |
# File 'lib/gitlab/visibility_level.rb', line 44 def string_values .keys end |
.valid_level?(level) ⇒ Boolean
105 106 107 |
# File 'lib/gitlab/visibility_level.rb', line 105 def valid_level?(level) .value?(level) end |
Instance Method Details
#internal? ⇒ Boolean
132 133 134 |
# File 'lib/gitlab/visibility_level.rb', line 132 def internal? visibility_level_value == INTERNAL end |
#private? ⇒ Boolean
128 129 130 |
# File 'lib/gitlab/visibility_level.rb', line 128 def private? visibility_level_value == PRIVATE end |
#public? ⇒ Boolean
136 137 138 |
# File 'lib/gitlab/visibility_level.rb', line 136 def public? visibility_level_value == PUBLIC end |
#visibility ⇒ Object
144 145 146 |
# File 'lib/gitlab/visibility_level.rb', line 144 def visibility Gitlab::VisibilityLevel.string_level(visibility_level_value) end |
#visibility=(level) ⇒ Object
148 149 150 |
# File 'lib/gitlab/visibility_level.rb', line 148 def visibility=(level) self[visibility_level_field] = Gitlab::VisibilityLevel.level_value(level) end |
#visibility_attribute_present?(attributes) ⇒ Boolean
152 153 154 155 156 157 158 |
# File 'lib/gitlab/visibility_level.rb', line 152 def visibility_attribute_present?(attributes) visibility_level_attributes.each do |attr| return true if attributes[attr].present? end false end |
#visibility_attribute_value(attributes) ⇒ Object
160 161 162 163 164 165 166 |
# File 'lib/gitlab/visibility_level.rb', line 160 def visibility_attribute_value(attributes) visibility_level_attributes.each do |attr| return attributes[attr] if attributes.has_key?(attr) end nil end |
#visibility_level_attributes ⇒ Object
168 169 170 171 |
# File 'lib/gitlab/visibility_level.rb', line 168 def visibility_level_attributes [visibility_level_field, visibility_level_field.to_s, :visibility, 'visibility'] end |
#visibility_level_previous_changes ⇒ Object
124 125 126 |
# File 'lib/gitlab/visibility_level.rb', line 124 def visibility_level_previous_changes previous_changes[:visibility_level] end |
#visibility_level_value ⇒ Object
140 141 142 |
# File 'lib/gitlab/visibility_level.rb', line 140 def visibility_level_value self[visibility_level_field] end |