Class: Gitlab::Fp::Settings::DefaultSettingsParser

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/fp/settings/default_settings_parser.rb

Class Method Summary collapse

Class Method Details

.parse(module_name:, requested_setting_names:, default_settings:, mutually_dependent_settings_groups: []) ⇒ Array<(Hash, Hash)>

Returns settings, setting_types.

Parameters:

  • module_name (String)
  • requested_setting_names (Array)
  • default_settings (Hash)
  • mutually_dependent_settings_groups (Array) (defaults to: [])

Returns:

  • (Array<(Hash, Hash)>)

    settings, setting_types

Raises:

  • (RuntimeError)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/gitlab/fp/settings/default_settings_parser.rb', line 13

def self.parse(
  module_name:,
  requested_setting_names:,
  default_settings:,
  mutually_dependent_settings_groups: []
)
  settings = {}
  setting_types = {}

  default_settings.each do |setting_name, setting_value_and_type|
    next unless requested_setting_names.include?(setting_name)

    unless setting_value_and_type.is_a?(Array) && setting_value_and_type.length == 2
      raise "#{module_name} Setting entry for '#{setting_name}' must " \
        "be a two-element array containing the value and type."
    end

    setting_value, setting_type = setting_value_and_type

    unless setting_type.is_a?(Class) || setting_type == :Boolean
      raise "#{module_name} Setting type for '#{setting_name}' " \
        "must be a class or :Boolean, but it was a #{setting_type.class}."
    end

    validate_setting_type(setting_value, setting_type, setting_name, module_name) unless setting_value.nil?

    settings[setting_name] = setting_value
    setting_types[setting_name] = setting_type
  end

  mutually_dependent_settings_groups.each do |mutually_dependent_settings|
    validate_mutually_dependent_settings(
      requested_setting_names: requested_setting_names,
      mutually_dependent_settings: mutually_dependent_settings,
      default_setting_names: default_settings.keys
    )
  end

  [settings, setting_types]
end