Add Ci config entry that implements Null Object

This commit is contained in:
Grzegorz Bizon
2016-06-07 11:58:02 +02:00
parent b95c60a071
commit 69a3755c5a
3 changed files with 46 additions and 10 deletions
+12 -10
View File
@@ -5,22 +5,28 @@ module Gitlab
class Entry
include Config::ValidationHelpers
attr_reader :value, :parent
attr_reader :value, :nodes, :parent
def initialize(value, config, parent = nil)
@value = value
@config = config
@parent = parent
@nodes = {}
@errors = []
@nodes, @errors = [], []
keys.each_key do |key|
instance_variable_set("@#{key}", Null.new(nil, config, self))
end
end
def process!
return if leaf?
keys.each_pair do |key, entry|
next unless @value.include?(key)
@nodes[key] = entry.new(@value[key], @config, self)
keys.each do |key, entry_class|
next unless @value.has_key?(key)
entry = entry_class.new(@value[key], @config, self)
instance_variable_set("@#{key}", entry)
@nodes.append(entry)
end
nodes.each(&:process!)
@@ -31,10 +37,6 @@ module Gitlab
@errors + nodes.map(&:errors).flatten
end
def nodes
@nodes.values
end
def valid?
errors.none?
end
+17
View File
@@ -0,0 +1,17 @@
module Gitlab
module Ci
class Config
module Node
class Null < Entry
def keys
{}
end
def method_missing(*)
nil
end
end
end
end
end
end
@@ -0,0 +1,17 @@
require 'spec_helper'
describe Gitlab::Ci::Config::Node::Null do
let(:entry) { described_class.new(double, double) }
describe '#leaf?' do
it 'is leaf node' do
expect(entry).to be_leaf
end
end
describe '#any_method' do
it 'responds with nil' do
expect(entry.any_method).to be nil
end
end
end