Commit 87fe50f2 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Delegate Ci config entry value to single method

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