Commit 9edced40 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Use node factory to assemble global CI config entry

parent ccbdb402
......@@ -27,8 +27,8 @@ module Gitlab
def create(key, factory)
factory
.value(config[key])
.with(key: key, parent: self, global: global)
.value(@config[key])
.with(key: key, parent: self, global: @global)
factory.create!
end
......
......@@ -33,30 +33,38 @@ module Gitlab
node :cache, Node::Cache,
description: 'Configure caching between build jobs.'
node :jobs, Node::Jobs,
description: 'Definition of jobs for this pipeline.'
helpers :before_script, :image, :services, :after_script,
:variables, :stages, :types, :cache, :jobs
def initialize(config, **attributes)
super(setup(config), attributes)
def initialize(*)
super
@global = self
end
def stages
stages_defined? ? stages_value : types_value
private
def compose!
super
compose_stages!
compose_jobs!
end
private
def compose_stages!
factory = Node::Factory.new(Node::Jobs)
factory.value(@config.except(*nodes.keys))
factory.with(key: :jobs, parent: self, global: self)
factory.with(description: 'Jobs definition for this pipeline')
def setup(config)
return config unless config.is_a?(Hash)
@entries[:jobs] = factory.create!
end
jobs = config.except(*nodes.keys)
global = config.slice(*nodes.keys)
def compose_jobs!
if types_defined? && !stages_defined?
@entries[:stages] = @entries[:types]
end
global.merge(jobs: jobs)
@entries.delete(:types)
end
end
end
......
......@@ -35,7 +35,7 @@ describe Gitlab::Ci::Config::Node::Global do
end
it 'creates node object for each entry' do
expect(global.descendants.count).to eq 9
expect(global.descendants.count).to eq 8
end
it 'creates node object using valid class' do
......@@ -142,7 +142,7 @@ describe Gitlab::Ci::Config::Node::Global do
describe '#nodes' do
it 'instantizes all nodes' do
expect(global.descendants.count).to eq 9
expect(global.descendants.count).to eq 8
end
it 'contains undefined nodes' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment