From ecdcf04e88f6313ae8773e7b9886bc983adab83d Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon <grzesiek.bizon@gmail.com> Date: Thu, 7 Jul 2016 13:09:36 +0200 Subject: [PATCH] Add undefined CI node strategies to handle defaults --- lib/gitlab/ci/config/node/undefined.rb | 51 ++++++++++++++++++-------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/lib/gitlab/ci/config/node/undefined.rb b/lib/gitlab/ci/config/node/undefined.rb index f152c433c42..7b18e364675 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 -- GitLab