diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-06-03 20:54:33 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-06-03 21:10:50 +0200 |
commit | d2b708ac43b0810ea2ce4de196ce46692e536027 (patch) | |
tree | 53eca3126b41fbd59c2e18d54671f9fb5f1d468f /lib | |
parent | d501850e05ebadcbf2f957cbf35a0ffa6dbe31ff (diff) | |
download | gitlab-ce-d2b708ac43b0810ea2ce4de196ce46692e536027.tar.gz |
Extract CI config YAML parser to a separate class
With this approach it would be easier to add different sources of
configuration, that we do not necessairly have to be in YAML format.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/ci/config.rb | 8 | ||||
-rw-r--r-- | lib/gitlab/ci/config/parser.rb | 25 |
2 files changed, 29 insertions, 4 deletions
diff --git a/lib/gitlab/ci/config.rb b/lib/gitlab/ci/config.rb index 8f88ccf5bf4..0baefa70f61 100644 --- a/lib/gitlab/ci/config.rb +++ b/lib/gitlab/ci/config.rb @@ -4,13 +4,13 @@ module Gitlab class ParserError < StandardError; end def initialize(config) - @config = YAML.safe_load(config, [Symbol], [], true) + parser = Parser.new(config) - unless @config.is_a?(Hash) - raise ParserError, 'YAML should be a hash' + unless parser.valid? + raise ParserError, 'Invalid configuration format!' end - @config = @config.deep_symbolize_keys + @config = parser.parse end def to_hash diff --git a/lib/gitlab/ci/config/parser.rb b/lib/gitlab/ci/config/parser.rb new file mode 100644 index 00000000000..6e1b7ec8267 --- /dev/null +++ b/lib/gitlab/ci/config/parser.rb @@ -0,0 +1,25 @@ +module Gitlab + module Ci + class Config + class Parser + class FormatError < StandardError; end + + def initialize(config) + @config = YAML.safe_load(config, [Symbol], [], true) + end + + def valid? + @config.is_a?(Hash) + end + + def parse + unless valid? + raise FormatError, 'Invalid configuration format' + end + + @config.deep_symbolize_keys + end + end + end + end +end |