Welcome to mirror list, hosted at ThFree Co, Russian Federation.

file_config.rb « config « static_site_editor « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4180f6ccf00d407ce7b9229d1861f780e86c53c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
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
# frozen_string_literal: true

module Gitlab
  module StaticSiteEditor
    module Config
      #
      # Base GitLab Static Site Editor Configuration facade
      #
      class FileConfig
        ConfigError = Class.new(StandardError)

        def initialize(yaml)
          content_hash = content_hash(yaml)
          @global = Entry::Global.new(content_hash)
          @global.compose!
        rescue Gitlab::Config::Loader::FormatError => e
          raise FileConfig::ConfigError, e.message
        end

        def valid?
          @global.valid?
        end

        def errors
          @global.errors
        end

        def to_hash_with_defaults
          # NOTE: The current approach of simply mapping all the descendents' keys and values ('config')
          #       into a flat hash may need to be enhanced as we add more complex, non-scalar entries.
          @global.descendants.to_h { |descendant| [descendant.key, descendant.config] }
        end

        private

        def content_hash(yaml)
          Gitlab::Config::Loader::Yaml.new(yaml).load!
        end
      end
    end
  end
end