41 lines
911 B
Ruby
41 lines
911 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module Config
|
||
|
module Entry
|
||
|
##
|
||
|
# Entry that represents an inheritable configs.
|
||
|
#
|
||
|
module Inheritable
|
||
|
InheritError = Class.new(Gitlab::Config::Loader::FormatError)
|
||
|
|
||
|
def compose!(deps = nil, &blk)
|
||
|
super(deps, &blk)
|
||
|
|
||
|
inherit!(deps)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
# We inherit config entries from `default:`
|
||
|
# if the entry has the `inherit: true` flag set
|
||
|
def inherit!(deps)
|
||
|
return unless deps
|
||
|
|
||
|
self.class.nodes.each do |key, factory|
|
||
|
next unless factory.inheritable?
|
||
|
|
||
|
new_entry = overwrite_entry(deps, key, self[key])
|
||
|
|
||
|
entries[key] = new_entry if new_entry&.specified?
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def overwrite_entry(deps, key, current_entry)
|
||
|
raise NotImplementedError
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|