diff --git a/lib/gitlab/ci/config/node/undefined.rb b/lib/gitlab/ci/config/node/undefined.rb index f152c433c42c6669d3fa78f2f1b30dbdfb24a430..7b18e3646750d747ed1245839161f63808008ef3 100644 --- a/lib/gitlab/ci/config/node/undefined.rb +++ b/lib/gitlab/ci/config/node/undefined.rb @@ -13,38 +13,57 @@ module Gitlab class Undefined < Entry include Validatable + delegate :valid?, :errors, :value, to: :@strategy + validations do validates :config, type: Class end def initialize(node) super - - unless node.default.nil? - @default = fabricate_default(node) - end + @strategy = create_strategy(node, node.default) end - def value - @default.value if @default + def defined? + false end - def valid? - @default ? @default.valid? : true - end + private + + def create_strategy(node, default) + if default.nil? + Undefined::NullStrategy.new + else + entry = Node::Factory + .fabricate(node, default, attributes) - def errors - @default ? @default.errors : [] + Undefined::DefaultStrategy.new(entry) + end end - def defined? - false + class DefaultStrategy + delegate :valid?, :errors, :value, to: :@default + + def initialize(entry) + @default = entry + end end - private + class NullStrategy + def initialize(*) + end - def fabricate_default(node) - Node::Factory.fabricate(node, node.default, attributes) + def value + nil + end + + def valid? + true + end + + def errors + [] + end end end end