From 04ece6664a04e7c352582100bdd6e8d78c3ea7cc Mon Sep 17 00:00:00 2001
From: Grzegorz Bizon <grzesiek.bizon@gmail.com>
Date: Fri, 24 Jun 2016 08:58:09 +0200
Subject: [PATCH] Add ci config class that represents a key value

---
 lib/gitlab/ci/config/node/key.rb           | 18 ++++++++++++
 lib/gitlab/ci/config/node/validators.rb    | 10 +++++++
 spec/lib/gitlab/ci/config/node/key_spec.rb | 34 ++++++++++++++++++++++
 3 files changed, 62 insertions(+)
 create mode 100644 lib/gitlab/ci/config/node/key.rb
 create mode 100644 spec/lib/gitlab/ci/config/node/key_spec.rb

diff --git a/lib/gitlab/ci/config/node/key.rb b/lib/gitlab/ci/config/node/key.rb
new file mode 100644
index 00000000000..f8b461ca098
--- /dev/null
+++ b/lib/gitlab/ci/config/node/key.rb
@@ -0,0 +1,18 @@
+module Gitlab
+  module Ci
+    class Config
+      module Node
+        ##
+        # Entry that represents a key.
+        #
+        class Key < Entry
+          include Validatable
+
+          validations do
+            validates :config, key: true
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/lib/gitlab/ci/config/node/validators.rb b/lib/gitlab/ci/config/node/validators.rb
index 56f7661daf0..f2b3a8a3f81 100644
--- a/lib/gitlab/ci/config/node/validators.rb
+++ b/lib/gitlab/ci/config/node/validators.rb
@@ -13,6 +13,16 @@ module Gitlab
             end
           end
 
+          class KeyValidator < ActiveModel::EachValidator
+            include LegacyValidationHelpers
+
+            def validate_each(record, attribute, value)
+              unless validate_string(value)
+                record.errors.add(attribute, 'should be a string or symbol')
+              end
+            end
+          end
+
           class TypeValidator < ActiveModel::EachValidator
             def validate_each(record, attribute, value)
               type = options[:with]
diff --git a/spec/lib/gitlab/ci/config/node/key_spec.rb b/spec/lib/gitlab/ci/config/node/key_spec.rb
new file mode 100644
index 00000000000..23e7fc46201
--- /dev/null
+++ b/spec/lib/gitlab/ci/config/node/key_spec.rb
@@ -0,0 +1,34 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Config::Node::Key do
+  let(:entry) { described_class.new(config) }
+
+  describe 'validations' do
+    context 'when entry config value is correct' do
+      let(:config) { 'test' }
+
+      describe '#value' do
+        it 'returns key value' do
+          expect(entry.value).to eq 'test'
+        end
+      end
+
+      describe '#valid?' do
+        it 'is valid' do
+          expect(entry).to be_valid
+        end
+      end
+    end
+
+    context 'when entry value is not correct' do
+      let(:config) { [ 'incorrect' ] }
+
+      describe '#errors' do
+        it 'saves errors' do
+          expect(entry.errors)
+            .to include 'Key config should be a string or symbol'
+        end
+      end
+    end
+  end
+end
-- 
GitLab