Add undefined CI node strategies to handle defaults

This commit is contained in:
Grzegorz Bizon 2016-07-07 13:09:36 +02:00
parent de8b93bbff
commit ecdcf04e88
1 changed files with 37 additions and 18 deletions

View File

@ -13,28 +13,15 @@ module Gitlab
class Undefined < Entry class Undefined < Entry
include Validatable include Validatable
delegate :valid?, :errors, :value, to: :@strategy
validations do validations do
validates :config, type: Class validates :config, type: Class
end end
def initialize(node) def initialize(node)
super super
@strategy = create_strategy(node, node.default)
unless node.default.nil?
@default = fabricate_default(node)
end
end
def value
@default.value if @default
end
def valid?
@default ? @default.valid? : true
end
def errors
@default ? @default.errors : []
end end
def defined? def defined?
@ -43,8 +30,40 @@ module Gitlab
private private
def fabricate_default(node) def create_strategy(node, default)
Node::Factory.fabricate(node, node.default, attributes) if default.nil?
Undefined::NullStrategy.new
else
entry = Node::Factory
.fabricate(node, default, attributes)
Undefined::DefaultStrategy.new(entry)
end
end
class DefaultStrategy
delegate :valid?, :errors, :value, to: :@default
def initialize(entry)
@default = entry
end
end
class NullStrategy
def initialize(*)
end
def value
nil
end
def valid?
true
end
def errors
[]
end
end end
end end
end end