Commit 06c8c490 authored by Grzegorz Bizon's avatar Grzegorz Bizon 🌡

Do not modify extensible CI/CD entries by reference

parent 76d4eff5
......@@ -7,16 +7,15 @@ module Gitlab
ExtensionError = Class.new(StandardError)
def initialize(hash, context = hash)
def initialize(hash)
@hash = hash
@context = context
end
def each
@hash.each_pair do |key, value|
next unless value.key?(:extends)
yield Extendable::Entry.new(key, value, @context)
yield Extendable::Entry.new(key, @hash)
end
end
......@@ -24,7 +23,7 @@ module Gitlab
each do |entry|
raise ExtensionError unless entry.valid?
@hash[entry.key] = entry.extend!
entry.extend!
end
end
end
......
......@@ -5,10 +5,9 @@ module Gitlab
class Entry
attr_reader :key
def initialize(key, value, context, parent = nil)
def initialize(key, hash, parent = nil)
@key = key
@value = value
@context = context
@hash = hash
@parent = parent
end
......@@ -16,32 +15,29 @@ module Gitlab
true
end
# def circular_dependency?
# @extends.to_s == @key.to_s
# end
def value
@value ||= @hash.fetch(@key)
end
def base
Extendable::Entry
.new(extends, @context.fetch(extends), @context, self)
.new(extends, @hash, self)
.extend!
end
def extensible?
@value.key?(:extends)
value.key?(:extends)
end
def extends
@value.fetch(:extends).to_sym
value.fetch(:extends).to_sym
end
def extend!
if extensible?
original = @value.dup
parent = base.dup
@value.clear.deep_merge!(parent).deep_merge!(original)
@hash[key] = base.deep_merge(value)
else
@value.to_h
value
end
end
end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment