summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/ci/config/extendable/entry.rb42
1 files changed, 24 insertions, 18 deletions
diff --git a/lib/gitlab/ci/config/extendable/entry.rb b/lib/gitlab/ci/config/extendable/entry.rb
index d5eef647b3e..5b26faaa806 100644
--- a/lib/gitlab/ci/config/extendable/entry.rb
+++ b/lib/gitlab/ci/config/extendable/entry.rb
@@ -9,28 +9,26 @@ module Gitlab
@key = key
@context = context
@parent = parent
+
+ raise StandardError, 'Invalid entry key!' unless @context.key?(@key)
end
- def valid?
- true
+ def extensible?
+ value.is_a?(Hash) && value.key?(:extends)
end
def value
@value ||= @context.fetch(@key)
end
- def base_hash
- Extendable::Entry
+ def base_hash!
+ @base ||= Extendable::Entry
.new(extends_key, @context, self)
.extend!
end
- def extensible?
- value.key?(:extends)
- end
-
def extends_key
- value.fetch(:extends).to_s.to_sym
+ value.fetch(:extends).to_s.to_sym if extensible?
end
def path
@@ -38,19 +36,23 @@ module Gitlab
end
def extend!
- if circular_dependency?
- raise Extendable::Collection::CircularDependencyError
+ return value unless extensible?
+
+ if unknown_extension?
+ raise Extendable::Collection::InvalidExtensionError,
+ 'Unknown extension!'
end
- if invalid_extends_key?
- raise Extendable::Collection::InvalidExtensionError
+ if invalid_base?
+ raise Extendable::Collection::InvalidExtensionError,
+ 'Invalid base hash!'
end
- if extensible?
- @context[key] = base_hash.deep_merge(value)
- else
- value
+ if circular_dependency?
+ raise Extendable::Collection::CircularDependencyError
end
+
+ @context[key] = base_hash!.deep_merge(value)
end
private
@@ -59,9 +61,13 @@ module Gitlab
path.count(key) > 1
end
- def invalid_extends_key?
+ def unknown_extension?
!@context.key?(key)
end
+
+ def invalid_base?
+ !@context[extends_key].is_a?(Hash)
+ end
end
end
end