40 lines
922 B
Ruby
40 lines
922 B
Ruby
|
module Gitlab
|
||
|
module Ci
|
||
|
class Config
|
||
|
module Node
|
||
|
##
|
||
|
# Factory class responsible for fabricating node entry objects.
|
||
|
#
|
||
|
# It uses Fluent Interface pattern to set all necessary attributes.
|
||
|
#
|
||
|
class Factory
|
||
|
class InvalidFactory < StandardError; end
|
||
|
|
||
|
def initialize(entry_class)
|
||
|
@entry_class = entry_class
|
||
|
@attributes = {}
|
||
|
end
|
||
|
|
||
|
def with(attributes)
|
||
|
@attributes.merge!(attributes)
|
||
|
self
|
||
|
end
|
||
|
|
||
|
def nullify!
|
||
|
@entry_class = Node::Null
|
||
|
self
|
||
|
end
|
||
|
|
||
|
def create!
|
||
|
raise InvalidFactory unless @attributes.has_key?(:value)
|
||
|
|
||
|
@entry_class.new(@attributes[:value]).tap do |entry|
|
||
|
entry.description = @attributes[:description]
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|