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

Delegate Ci config entry value to single method

parent cba266aa
No related branches found
No related tags found
1 merge request!4482Add global entry with before script to new CI config
Pipeline #
Loading
@@ -9,9 +9,7 @@ module Gitlab
Loading
@@ -9,9 +9,7 @@ module Gitlab
'Script that is executed before the one defined in a job.' 'Script that is executed before the one defined in a job.'
end end
   
def script def value
raise unless valid?
@value.join("\n") @value.join("\n")
end end
   
Loading
Loading
Loading
@@ -3,17 +3,14 @@ module Gitlab
Loading
@@ -3,17 +3,14 @@ module Gitlab
class Config class Config
module Node module Node
class Entry class Entry
attr_reader :value, :nodes, :parent class InvalidError < StandardError; end
   
def initialize(value, root = nil, parent = nil) def initialize(value, root = nil, parent = nil)
@value = value @value = value
@root = root @root = root
@parent = parent @parent = parent
@nodes, @errors = [], [] @nodes = {}
@errors = []
keys.each_key do |key|
instance_variable_set("@#{key}", Null.new(nil, root, self))
end
   
unless leaf? || value.is_a?(Hash) unless leaf? || value.is_a?(Hash)
@errors << 'should be a configuration entry with hash value' @errors << 'should be a configuration entry with hash value'
Loading
@@ -24,17 +21,23 @@ module Gitlab
Loading
@@ -24,17 +21,23 @@ module Gitlab
return if leaf? || !valid? return if leaf? || !valid?
   
keys.each do |key, entry_class| keys.each do |key, entry_class|
next unless @value.has_key?(key) if @value.has_key?(key)
entry = entry_class.new(@value[key], @root, self)
else
entry = Node::Null.new(nil, @root, self)
end
   
entry = entry_class.new(@value[key], @root, self) @nodes[key] = entry
instance_variable_set("@#{key}", entry)
@nodes.append(entry)
end end
   
nodes.each(&:process!) nodes.each(&:process!)
nodes.each(&:validate!) nodes.each(&:validate!)
end end
   
def nodes
@nodes.values
end
def errors def errors
@errors + nodes.map(&:errors).flatten @errors + nodes.map(&:errors).flatten
end end
Loading
@@ -51,6 +54,17 @@ module Gitlab
Loading
@@ -51,6 +54,17 @@ module Gitlab
self.class.nodes || {} self.class.nodes || {}
end end
   
def method_missing(name, *args)
super unless keys.has_key?(name)
raise InvalidError unless valid?
@nodes[name].value
end
def value
raise NotImplementedError
end
def validate! def validate!
raise NotImplementedError raise NotImplementedError
end end
Loading
Loading
Loading
@@ -4,10 +4,6 @@ module Gitlab
Loading
@@ -4,10 +4,6 @@ module Gitlab
module Node module Node
class Global < Entry class Global < Entry
add_node :before_script, BeforeScript add_node :before_script, BeforeScript
def before_script
@before_script.script
end
end end
end end
end end
Loading
Loading
Loading
@@ -3,6 +3,13 @@ module Gitlab
Loading
@@ -3,6 +3,13 @@ module Gitlab
class Config class Config
module Node module Node
class Null < Entry class Null < Entry
def value
nil
end
def validate!
end
def method_missing(*) def method_missing(*)
nil nil
end end
Loading
Loading
Loading
@@ -7,9 +7,9 @@ describe Gitlab::Ci::Config::Node::BeforeScript do
Loading
@@ -7,9 +7,9 @@ describe Gitlab::Ci::Config::Node::BeforeScript do
context 'when entry value is correct' do context 'when entry value is correct' do
let(:value) { ['ls', 'pwd'] } let(:value) { ['ls', 'pwd'] }
   
describe '#script' do describe '#value' do
it 'returns concatenated command' do it 'returns concatenated command' do
expect(entry.script).to eq "ls\npwd" expect(entry.value).to eq "ls\npwd"
end end
end end
   
Loading
@@ -29,11 +29,5 @@ describe Gitlab::Ci::Config::Node::BeforeScript do
Loading
@@ -29,11 +29,5 @@ describe Gitlab::Ci::Config::Node::BeforeScript do
.to include /should be an array of strings/ .to include /should be an array of strings/
end end
end end
describe '#script' do
it 'raises error' do
expect { entry.script }.to raise_error
end
end
end end
end end
Loading
@@ -65,6 +65,14 @@ describe Gitlab::Ci::Config::Node::Global do
Loading
@@ -65,6 +65,14 @@ describe Gitlab::Ci::Config::Node::Global do
.to include 'before_script should be an array of strings' .to include 'before_script should be an array of strings'
end end
end end
describe '#before_script' do
it 'raises error' do
expect { global.before_script }.to raise_error(
Gitlab::Ci::Config::Node::Entry::InvalidError
)
end
end
end end
   
context 'when value is not a hash' do context 'when value is not a hash' do
Loading
Loading
Loading
@@ -14,4 +14,10 @@ describe Gitlab::Ci::Config::Node::Null do
Loading
@@ -14,4 +14,10 @@ describe Gitlab::Ci::Config::Node::Null do
expect(entry.any_method).to be nil expect(entry.any_method).to be nil
end end
end end
describe '#value' do
it 'returns nill' do
expect(entry.value).to be nil
end
end
end end
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