Use node factory to assemble global CI config entry

This commit is contained in:
Grzegorz Bizon 2016-07-09 16:51:26 +02:00
parent ccbdb4022a
commit 9edced40dd
3 changed files with 26 additions and 18 deletions

View File

@ -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

View File

@ -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
end
private
def setup(config)
return config unless config.is_a?(Hash)
def compose!
super
jobs = config.except(*nodes.keys)
global = config.slice(*nodes.keys)
compose_stages!
compose_jobs!
end
global.merge(jobs: jobs)
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')
@entries[:jobs] = factory.create!
end
def compose_jobs!
if types_defined? && !stages_defined?
@entries[:stages] = @entries[:types]
end
@entries.delete(:types)
end
end
end

View File

@ -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