From 6ae80732bb3b503e2d15acb2cab527c17e22e34b Mon Sep 17 00:00:00 2001
From: Grzegorz Bizon <grzesiek.bizon@gmail.com>
Date: Tue, 5 Jul 2016 14:17:09 +0200
Subject: [PATCH] Add ability to define nodes in new CI config entry

---
 lib/gitlab/ci/config/node/entry.rb            | 16 ++++++++++------
 spec/lib/gitlab/ci/config/node/global_spec.rb | 16 ++++++++--------
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/lib/gitlab/ci/config/node/entry.rb b/lib/gitlab/ci/config/node/entry.rb
index 9e79e170a4f..7148f4c2a79 100644
--- a/lib/gitlab/ci/config/node/entry.rb
+++ b/lib/gitlab/ci/config/node/entry.rb
@@ -26,12 +26,16 @@ module Gitlab
             process_nodes!
           end
 
+          def leaf?
+            nodes.none?
+          end
+
           def nodes
-            @nodes.values
+            self.class.nodes
           end
 
-          def leaf?
-            self.class.nodes.none?
+          def descendants
+            @nodes.values
           end
 
           def ancestors
@@ -43,7 +47,7 @@ module Gitlab
           end
 
           def errors
-            @validator.messages + nodes.flat_map(&:errors)
+            @validator.messages + @nodes.values.flat_map(&:errors)
           end
 
           def value
@@ -73,13 +77,13 @@ module Gitlab
           private
 
           def compose!
-            self.class.nodes.each do |key, essence|
+            nodes.each do |key, essence|
               @nodes[key] = create_node(key, essence)
             end
           end
 
           def process_nodes!
-            nodes.each(&:process!)
+            @nodes.each_value(&:process!)
           end
 
           def create_node(key, essence)
diff --git a/spec/lib/gitlab/ci/config/node/global_spec.rb b/spec/lib/gitlab/ci/config/node/global_spec.rb
index 8f2f9e171d1..254cb28190c 100644
--- a/spec/lib/gitlab/ci/config/node/global_spec.rb
+++ b/spec/lib/gitlab/ci/config/node/global_spec.rb
@@ -31,24 +31,24 @@ describe Gitlab::Ci::Config::Node::Global do
         before { global.process! }
 
         it 'creates nodes hash' do
-          expect(global.nodes).to be_an Array
+          expect(global.descendants).to be_an Array
         end
 
         it 'creates node object for each entry' do
-          expect(global.nodes.count).to eq 9
+          expect(global.descendants.count).to eq 9
         end
 
         it 'creates node object using valid class' do
-          expect(global.nodes.first)
+          expect(global.descendants.first)
             .to be_an_instance_of Gitlab::Ci::Config::Node::Script
-          expect(global.nodes.second)
+          expect(global.descendants.second)
             .to be_an_instance_of Gitlab::Ci::Config::Node::Image
         end
 
         it 'sets correct description for nodes' do
-          expect(global.nodes.first.description)
+          expect(global.descendants.first.description)
             .to eq 'Script that will be executed before each job.'
-          expect(global.nodes.second.description)
+          expect(global.descendants.second.description)
             .to eq 'Docker image that will be used to execute jobs.'
         end
       end
@@ -139,11 +139,11 @@ describe Gitlab::Ci::Config::Node::Global do
 
       describe '#nodes' do
         it 'instantizes all nodes' do
-          expect(global.nodes.count).to eq 9
+          expect(global.descendants.count).to eq 9
         end
 
         it 'contains undefined nodes' do
-          expect(global.nodes.first)
+          expect(global.descendants.first)
             .to be_an_instance_of Gitlab::Ci::Config::Node::Undefined
         end
       end
-- 
GitLab