Add gitlab ci configuration class that holds hash

As for now, we keep this class inside a oryginal config processor class.
We will move implementation to this class and delegate to it from
current config processor.

After original gitlab ci yaml processor not longer has relevant
impelemntation we will replace it with new configuration class.
This commit is contained in:
Grzegorz Bizon 2016-06-03 14:20:34 +02:00
parent 3f4ac2ff60
commit d501850e05
3 changed files with 58 additions and 7 deletions

View File

@ -12,18 +12,14 @@ module Ci
attr_reader :before_script, :after_script, :image, :services, :path, :cache
def initialize(config, path = nil)
@config = YAML.safe_load(config, [Symbol], [], true)
@config = Gitlab::Ci::Config.new(config).to_hash
@path = path
unless @config.is_a? Hash
raise ValidationError, "YAML should be a hash"
end
@config = @config.deep_symbolize_keys
initial_parsing
validate!
rescue Gitlab::Ci::Config::ParserError => e
raise ValidationError, e.message
end
def builds_for_stage_and_ref(stage, ref, tag = false, trigger_request = nil)

21
lib/gitlab/ci/config.rb Normal file
View File

@ -0,0 +1,21 @@
module Gitlab
module Ci
class Config
class ParserError < StandardError; end
def initialize(config)
@config = YAML.safe_load(config, [Symbol], [], true)
unless @config.is_a?(Hash)
raise ParserError, 'YAML should be a hash'
end
@config = @config.deep_symbolize_keys
end
def to_hash
@config
end
end
end
end

View File

@ -0,0 +1,34 @@
require 'spec_helper'
describe Gitlab::Ci::Config do
let(:config) do
described_class.new(yml)
end
context 'when yml config is valid' do
let(:yml) do
<<-EOS
image: ruby:2.2
rspec:
script:
- gem install rspec
- rspec
EOS
end
describe '#to_hash' do
it 'returns hash created from string' do
hash = {
image: 'ruby:2.2',
rspec: {
script: ['gem install rspec',
'rspec']
}
}
expect(config.to_hash).to eq hash
end
end
end
end