summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-08-17 11:42:57 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-09-04 14:17:01 +0200
commitfe08bdf3961c6bc7db038b3c4e7c3e7d65d2344d (patch)
treea3fe7bc617e9edfa64a0fba9e36145502bb6ce5a /lib
parentee9fd5c226fcf83b8a4a0bf2814c9d0efc530659 (diff)
downloadgitlab-ce-fe08bdf3961c6bc7db038b3c4e7c3e7d65d2344d.tar.gz
Add specs for extendable CI/CD hash entry class
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