Skip to content
Snippets Groups Projects
Commit a7ac2f74 authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Simplify CI config entry node factory, use attribs

parent 9410aecc
No related branches found
No related tags found
1 merge request!5087Move CI job config entries from legacy to new config
Pipeline #
Loading
Loading
@@ -26,7 +26,9 @@ module Gitlab
private
 
def create_node(key, factory)
factory.with(value: @config[key], key: key, parent: self)
factory
.value(config[key])
.with(key: key, parent: self, global: global)
 
factory.create!
end
Loading
Loading
Loading
Loading
@@ -8,13 +8,17 @@ module Gitlab
class Entry
class InvalidError < StandardError; end
 
attr_reader :config
attr_accessor :key, :parent, :description
attr_reader :config, :attributes
attr_accessor :key, :parent, :global, :description
 
def initialize(config)
def initialize(config, **attributes)
@config = config
@nodes = {}
 
(@attributes = attributes).each do |attribute, value|
public_send("#{attribute}=", value)
end
@validator = self.class.validator.new(self)
@validator.validate
end
Loading
Loading
@@ -68,10 +72,6 @@ module Gitlab
true
end
 
def attributes
{ key: @key, parent: @parent, description: @description }
end
def self.default
end
 
Loading
Loading
Loading
Loading
@@ -13,38 +13,29 @@ module Gitlab
@attributes = {}
end
 
def value(value)
@value = value
self
end
def with(attributes)
@attributes.merge!(attributes)
self
end
 
def create!
raise InvalidFactory unless @attributes.has_key?(:value)
raise InvalidFactory unless defined?(@value)
 
##
# We assume that unspecified entry is undefined.
# See issue #18775.
#
if @attributes[:value].nil?
fabricate(Node::Undefined, @node)
if @value.nil?
Node::Undefined.new(@node, @attributes)
else
fabricate(@node, @attributes[:value])
@node.new(@value, @attributes)
end
end
def self.fabricate(node, value, **attributes)
node.new(value).tap do |entry|
entry.key = attributes[:key]
entry.parent = attributes[:parent]
entry.description = attributes[:description]
end
end
private
def fabricate(node, value)
self.class.fabricate(node, value, @attributes)
end
end
end
end
Loading
Loading
Loading
Loading
@@ -51,6 +51,10 @@ module Gitlab
def stages
stages_defined? ? stages_value : types_value
end
def global
self
end
end
end
end
Loading
Loading
Loading
Loading
@@ -30,13 +30,13 @@ module Gitlab
private
 
def create_node(key, value)
node = key.to_s.start_with?('.') ? Node::HiddenJob : Node::Job
job_node = key.to_s.start_with?('.') ? Node::HiddenJob : Node::Job
 
attributes = { key: key,
parent: self,
description: "#{key} job definition." }
job_attributes = { key: key,
parent: self,
description: "#{key} job definition." }
 
Node::Factory.fabricate(node, value, attributes)
job_node.new(value, attributes.merge(job_attributes))
end
end
end
Loading
Loading
Loading
Loading
@@ -19,7 +19,7 @@ module Gitlab
validates :config, type: Class
end
 
def initialize(node)
def initialize(node, **attributes)
super
@strategy = create_strategy(node, node.default)
end
Loading
Loading
@@ -34,9 +34,7 @@ module Gitlab
if default.nil?
Undefined::NullStrategy.new
else
entry = Node::Factory
.fabricate(node, default, attributes)
entry = node.new(default, attributes)
Undefined::DefaultStrategy.new(entry)
end
end
Loading
Loading
Loading
Loading
@@ -5,24 +5,10 @@ describe Gitlab::Ci::Config::Node::Factory do
let(:factory) { described_class.new(entry_class) }
let(:entry_class) { Gitlab::Ci::Config::Node::Script }
 
describe '.fabricate' do
it 'fabricates entry with attributes set' do
fabricated = described_class
.fabricate(entry_class, ['ls'],
parent: true, key: :test)
expect(fabricated.parent).to be true
expect(fabricated.key).to eq :test
expect(fabricated.value).to eq ['ls']
expect(fabricated.attributes)
.to eq(parent: true, key: :test, description: nil)
end
end
context 'when setting up a value' do
it 'creates entry with valid value' do
entry = factory
.with(value: ['ls', 'pwd'])
.value(['ls', 'pwd'])
.create!
 
expect(entry.value).to eq ['ls', 'pwd']
Loading
Loading
@@ -31,7 +17,7 @@ describe Gitlab::Ci::Config::Node::Factory do
context 'when setting description' do
it 'creates entry with description' do
entry = factory
.with(value: ['ls', 'pwd'])
.value(['ls', 'pwd'])
.with(description: 'test description')
.create!
 
Loading
Loading
@@ -43,7 +29,8 @@ describe Gitlab::Ci::Config::Node::Factory do
context 'when setting key' do
it 'creates entry with custom key' do
entry = factory
.with(value: ['ls', 'pwd'], key: 'test key')
.value(['ls', 'pwd'])
.with(key: 'test key')
.create!
 
expect(entry.key).to eq 'test key'
Loading
Loading
@@ -55,7 +42,8 @@ describe Gitlab::Ci::Config::Node::Factory do
 
it 'creates entry with valid parent' do
entry = factory
.with(value: 'ls', parent: parent)
.value('ls')
.with(parent: parent)
.create!
 
expect(entry.parent).to eq parent
Loading
Loading
@@ -74,7 +62,7 @@ describe Gitlab::Ci::Config::Node::Factory do
context 'when creating entry with nil value' do
it 'creates an undefined entry' do
entry = factory
.with(value: nil)
.value(nil)
.create!
 
expect(entry).to be_an_instance_of Gitlab::Ci::Config::Node::Undefined
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment