diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2018-08-17 11:42:57 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2018-09-04 14:17:01 +0200 |
commit | fe08bdf3961c6bc7db038b3c4e7c3e7d65d2344d (patch) | |
tree | a3fe7bc617e9edfa64a0fba9e36145502bb6ce5a /lib | |
parent | ee9fd5c226fcf83b8a4a0bf2814c9d0efc530659 (diff) | |
download | gitlab-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.rb | 42 |
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 |