summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-06-13 08:50:12 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-06-13 08:50:12 +0200
commit7c8f3b0cfc38838755a21641e402b3ef7a1f9d0b (patch)
tree0d34247e119cb70daa7b6a4aeb12299284950be6
parentcc373a35504bc1f92f1a040c87a712a6480757ec (diff)
downloadgitlab-ce-7c8f3b0cfc38838755a21641e402b3ef7a1f9d0b.tar.gz
Duplicate CI config node factory on class level
-rw-r--r--lib/gitlab/ci/config/node/configurable.rb4
-rw-r--r--lib/gitlab/ci/config/node/entry.rb6
-rw-r--r--spec/lib/gitlab/ci/config/node/configurable_spec.rb35
3 files changed, 41 insertions, 4 deletions
diff --git a/lib/gitlab/ci/config/node/configurable.rb b/lib/gitlab/ci/config/node/configurable.rb
index 650c6efba63..f2383e07aa7 100644
--- a/lib/gitlab/ci/config/node/configurable.rb
+++ b/lib/gitlab/ci/config/node/configurable.rb
@@ -37,7 +37,9 @@ module Gitlab
end
class_methods do
- attr_reader :allowed_nodes
+ def allowed_nodes
+ Hash[@allowed_nodes.map { |key, factory| [key, factory.dup] } ]
+ end
private
diff --git a/lib/gitlab/ci/config/node/entry.rb b/lib/gitlab/ci/config/node/entry.rb
index 2f327fa9bf3..e5692e72947 100644
--- a/lib/gitlab/ci/config/node/entry.rb
+++ b/lib/gitlab/ci/config/node/entry.rb
@@ -27,8 +27,8 @@ module Gitlab
end
def compose!
- allowed_nodes.each do |key, factory|
- @nodes[key] = create_node(key, factory.dup)
+ allowed_nodes.each do |key, essence|
+ @nodes[key] = create_node(key, essence)
end
end
@@ -62,7 +62,7 @@ module Gitlab
private
- def create_node(key, factory)
+ def create_node(key, essence)
raise NotImplementedError
end
end
diff --git a/spec/lib/gitlab/ci/config/node/configurable_spec.rb b/spec/lib/gitlab/ci/config/node/configurable_spec.rb
new file mode 100644
index 00000000000..47c68f96dc8
--- /dev/null
+++ b/spec/lib/gitlab/ci/config/node/configurable_spec.rb
@@ -0,0 +1,35 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Config::Node::Configurable do
+ let(:node) { Class.new }
+
+ before do
+ node.include(described_class)
+ end
+
+ describe 'allowed nodes' do
+ before do
+ node.class_eval do
+ allow_node :object, Object, description: 'test object'
+ end
+ end
+
+ describe '#allowed_nodes' do
+ it 'has valid allowed nodes' do
+ expect(node.allowed_nodes).to include :object
+ end
+
+ it 'creates a node factory' do
+ expect(node.allowed_nodes[:object])
+ .to be_an_instance_of Gitlab::Ci::Config::Node::Factory
+ end
+
+ it 'returns a duplicated factory object' do
+ first_factory = node.allowed_nodes[:object]
+ second_factory = node.allowed_nodes[:object]
+
+ expect(first_factory).not_to be_equal(second_factory)
+ end
+ end
+ end
+end