Class: Gitlab::FeatureCategories

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/feature_categories.rb

Constant Summary collapse

FEATURE_CATEGORY_DEFAULT =
'unknown'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(categories) ⇒ FeatureCategories

Returns a new instance of FeatureCategories.



19
20
21
# File 'lib/gitlab/feature_categories.rb', line 19

def initialize(categories)
  @categories = categories.to_set
end

Instance Attribute Details

#categoriesObject (readonly)

Returns the value of attribute categories.



7
8
9
# File 'lib/gitlab/feature_categories.rb', line 7

def categories
  @categories
end

Class Method Details

.defaultObject



9
10
11
# File 'lib/gitlab/feature_categories.rb', line 9

def self.default
  @default ||= self.load_from_yaml
end

.load_from_yamlObject



13
14
15
16
17
# File 'lib/gitlab/feature_categories.rb', line 13

def self.load_from_yaml
  categories = YAML.load_file(Rails.root.join('config', 'feature_categories.yml'))

  new(categories)
end

Instance Method Details

#from_request(request) ⇒ Object

If valid, returns a feature category from the given request.



24
25
26
27
28
29
30
31
32
# File 'lib/gitlab/feature_categories.rb', line 24

def from_request(request)
  category = request.headers["HTTP_X_GITLAB_FEATURE_CATEGORY"].presence

  return unless category && valid?(category)

  return unless ::Gitlab::RequestForgeryProtection.verified?(request.env)

  category
end

#get!(feature_category) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/gitlab/feature_categories.rb', line 34

def get!(feature_category)
  return feature_category if valid?(feature_category)

  raise "Unknown feature category: #{feature_category}" if Gitlab.dev_or_test_env?

  FEATURE_CATEGORY_DEFAULT
end

#valid?(category) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/gitlab/feature_categories.rb', line 42

def valid?(category)
  categories.include?(category.to_s)
end