summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-06-03 20:54:33 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-06-03 21:10:50 +0200
commitd2b708ac43b0810ea2ce4de196ce46692e536027 (patch)
tree53eca3126b41fbd59c2e18d54671f9fb5f1d468f /lib
parentd501850e05ebadcbf2f957cbf35a0ffa6dbe31ff (diff)
downloadgitlab-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.rb8
-rw-r--r--lib/gitlab/ci/config/parser.rb25
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