summaryrefslogtreecommitdiff
path: root/lib/gitlab
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-06-08 12:32:56 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-06-08 12:32:56 +0200
commit87fe50f2a0facd5bfdf287195a21932ff2340e1b (patch)
tree1066a62d368746378d4e3850941cdaf3184cee7e /lib/gitlab
parentcba266aabc60aeee64ac2eb7e76b3e9e7012bad4 (diff)
downloadgitlab-ce-87fe50f2a0facd5bfdf287195a21932ff2340e1b.tar.gz
Delegate Ci config entry value to single method
Diffstat (limited to 'lib/gitlab')
-rw-r--r--lib/gitlab/ci/config/node/before_script.rb4
-rw-r--r--lib/gitlab/ci/config/node/entry.rb34
-rw-r--r--lib/gitlab/ci/config/node/global.rb4
-rw-r--r--lib/gitlab/ci/config/node/null.rb7
4 files changed, 32 insertions, 17 deletions
diff --git a/lib/gitlab/ci/config/node/before_script.rb b/lib/gitlab/ci/config/node/before_script.rb
index 271cb7b5da1..be2ceebf3f9 100644
--- a/lib/gitlab/ci/config/node/before_script.rb
+++ b/lib/gitlab/ci/config/node/before_script.rb
@@ -9,9 +9,7 @@ module Gitlab
'Script that is executed before the one defined in a job.'
end
- def script
- raise unless valid?
-
+ def value
@value.join("\n")
end
diff --git a/lib/gitlab/ci/config/node/entry.rb b/lib/gitlab/ci/config/node/entry.rb
index f8f2d0be23a..0767fadcb9a 100644
--- a/lib/gitlab/ci/config/node/entry.rb
+++ b/lib/gitlab/ci/config/node/entry.rb
@@ -3,17 +3,14 @@ module Gitlab
class Config
module Node
class Entry
- attr_reader :value, :nodes, :parent
+ class InvalidError < StandardError; end
def initialize(value, root = nil, parent = nil)
@value = value
@root = root
@parent = parent
- @nodes, @errors = [], []
-
- keys.each_key do |key|
- instance_variable_set("@#{key}", Null.new(nil, root, self))
- end
+ @nodes = {}
+ @errors = []
unless leaf? || value.is_a?(Hash)
@errors << 'should be a configuration entry with hash value'
@@ -24,17 +21,23 @@ module Gitlab
return if leaf? || !valid?
keys.each do |key, entry_class|
- next unless @value.has_key?(key)
+ if @value.has_key?(key)
+ entry = entry_class.new(@value[key], @root, self)
+ else
+ entry = Node::Null.new(nil, @root, self)
+ end
- entry = entry_class.new(@value[key], @root, self)
- instance_variable_set("@#{key}", entry)
- @nodes.append(entry)
+ @nodes[key] = entry
end
nodes.each(&:process!)
nodes.each(&:validate!)
end
+ def nodes
+ @nodes.values
+ end
+
def errors
@errors + nodes.map(&:errors).flatten
end
@@ -51,6 +54,17 @@ module Gitlab
self.class.nodes || {}
end
+ def method_missing(name, *args)
+ super unless keys.has_key?(name)
+ raise InvalidError unless valid?
+
+ @nodes[name].value
+ end
+
+ def value
+ raise NotImplementedError
+ end
+
def validate!
raise NotImplementedError
end
diff --git a/lib/gitlab/ci/config/node/global.rb b/lib/gitlab/ci/config/node/global.rb
index 5912ead21c6..cfa506c28b7 100644
--- a/lib/gitlab/ci/config/node/global.rb
+++ b/lib/gitlab/ci/config/node/global.rb
@@ -4,10 +4,6 @@ module Gitlab
module Node
class Global < Entry
add_node :before_script, BeforeScript
-
- def before_script
- @before_script.script
- end
end
end
end
diff --git a/lib/gitlab/ci/config/node/null.rb b/lib/gitlab/ci/config/node/null.rb
index fc240e16f55..db3fa05c328 100644
--- a/lib/gitlab/ci/config/node/null.rb
+++ b/lib/gitlab/ci/config/node/null.rb
@@ -3,6 +3,13 @@ module Gitlab
class Config
module Node
class Null < Entry
+ def value
+ nil
+ end
+
+ def validate!
+ end
+
def method_missing(*)
nil
end