diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2018-02-23 10:41:10 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2018-02-23 10:41:10 +0100 |
commit | 227e18ea43eed473e30f9e4ae6e1b150e600f903 (patch) | |
tree | eae0dac34e485ea3a80a0bbf6db19e9ab6fabae1 | |
parent | 8c7374cafcfe77f880d45f32ff11b38d257f5373 (diff) | |
download | gitlab-ce-227e18ea43eed473e30f9e4ae6e1b150e600f903.tar.gz |
Add support for evaluating pipeline expression variables
7 files changed, 32 insertions, 6 deletions
diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/equals.rb b/lib/gitlab/ci/pipeline/expression/lexeme/equals.rb index b499d41a509..18e4db49eee 100644 --- a/lib/gitlab/ci/pipeline/expression/lexeme/equals.rb +++ b/lib/gitlab/ci/pipeline/expression/lexeme/equals.rb @@ -11,7 +11,7 @@ module Gitlab @right = right end - def evaluate(**variables) + def evaluate(variables) @left.evaluate(variables) == @right.evaluate(variables) end diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/null.rb b/lib/gitlab/ci/pipeline/expression/lexeme/null.rb index 5bf06a9eee2..b62e72cde2a 100644 --- a/lib/gitlab/ci/pipeline/expression/lexeme/null.rb +++ b/lib/gitlab/ci/pipeline/expression/lexeme/null.rb @@ -10,9 +10,13 @@ module Gitlab @value = value end - def evaluate(**_) + def evaluate(_) nil end + + def self.build(value) + new(value) + end end end end diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/string.rb b/lib/gitlab/ci/pipeline/expression/lexeme/string.rb index 6f77d443c3c..d655b029315 100644 --- a/lib/gitlab/ci/pipeline/expression/lexeme/string.rb +++ b/lib/gitlab/ci/pipeline/expression/lexeme/string.rb @@ -10,7 +10,7 @@ module Gitlab @value = value end - def evaluate(**_) + def evaluate(_) @value.to_s end diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/variable.rb b/lib/gitlab/ci/pipeline/expression/lexeme/variable.rb index 01eea6b19a6..ccf1fdfae2c 100644 --- a/lib/gitlab/ci/pipeline/expression/lexeme/variable.rb +++ b/lib/gitlab/ci/pipeline/expression/lexeme/variable.rb @@ -10,7 +10,8 @@ module Gitlab @name = name end - def evaluate(**variables) + def evaluate(variables) + variables[@name] end def self.build(string) diff --git a/lib/gitlab/ci/pipeline/expression/lexer.rb b/lib/gitlab/ci/pipeline/expression/lexer.rb index a0d1d7cd87d..067ad5fd312 100644 --- a/lib/gitlab/ci/pipeline/expression/lexer.rb +++ b/lib/gitlab/ci/pipeline/expression/lexer.rb @@ -6,6 +6,7 @@ module Gitlab LEXEMES = [ Expression::Lexeme::Variable, Expression::Lexeme::String, + Expression::Lexeme::Null, Expression::Lexeme::Equals ].freeze diff --git a/lib/gitlab/ci/pipeline/expression/statement.rb b/lib/gitlab/ci/pipeline/expression/statement.rb index cb76bc00764..4f0e101b730 100644 --- a/lib/gitlab/ci/pipeline/expression/statement.rb +++ b/lib/gitlab/ci/pipeline/expression/statement.rb @@ -18,7 +18,7 @@ module Gitlab @lexer = Expression::Lexer.new(statement) @variables = pipeline.variables.map do |variable| - { variable.key => variable.value } + [variable.key, variable.value] end end @@ -33,7 +33,7 @@ module Gitlab end def evaluate - parse_tree.evaluate(**@variables) + parse_tree.evaluate(@variables.to_h) end end end diff --git a/spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb b/spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb index e8a1fc0579e..9a35d71c658 100644 --- a/spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb @@ -60,4 +60,24 @@ describe Gitlab::Ci::Pipeline::Expression::Statement do end end end + + describe '#evaluate' do + statements = [ + ['$VARIABLE == "my variable"', true], + ['"my variable" == $VARIABLE', true], + ['$VARIABLE == null', false], + ['$VAR == null', true], + ['null == $VAR', true], + ['$VARIABLE', 'my variable'], + ['$VAR', nil], + ] + + statements.each do |expression, value| + it "evaluates `#{expression}` to `#{value}`" do + statement = described_class.new(expression, pipeline) + + expect(statement.evaluate).to eq value + end + end + end end |