Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-02-23 12:01:27 +0300
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-02-23 12:01:27 +0300
commit8517627410499486e2bb09d8a55ba6f0088d7503 (patch)
tree60a4d9857b9de8a02f57bf359d4a2593c0efedb9 /lib/gitlab/ci/pipeline/expression/lexeme
parent5ee43097fde03ac2fabb655f14aa15c8fe8ed631 (diff)
Move pipeline expression lexemes to a separate module
Diffstat (limited to 'lib/gitlab/ci/pipeline/expression/lexeme')
-rw-r--r--lib/gitlab/ci/pipeline/expression/lexeme/base.rb29
-rw-r--r--lib/gitlab/ci/pipeline/expression/lexeme/equals.rb27
-rw-r--r--lib/gitlab/ci/pipeline/expression/lexeme/null.rb22
-rw-r--r--lib/gitlab/ci/pipeline/expression/lexeme/string.rb26
-rw-r--r--lib/gitlab/ci/pipeline/expression/lexeme/variable.rb25
5 files changed, 129 insertions, 0 deletions
diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/base.rb b/lib/gitlab/ci/pipeline/expression/lexeme/base.rb
new file mode 100644
index 00000000000..29b73c94358
--- /dev/null
+++ b/lib/gitlab/ci/pipeline/expression/lexeme/base.rb
@@ -0,0 +1,29 @@
+module Gitlab
+ module Ci
+ module Pipeline
+ module Expression
+ module Lexeme
+ class Base
+ def evaluate(**variables)
+ raise NotImplementedError
+ end
+
+ def self.build(token)
+ raise NotImplementedError
+ end
+
+ def self.type
+ self::TYPE
+ end
+
+ def self.scan(scanner)
+ if scanner.scan(self::PATTERN)
+ Expression::Token.new(scanner.matched, self)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/equals.rb b/lib/gitlab/ci/pipeline/expression/lexeme/equals.rb
new file mode 100644
index 00000000000..0cb21131d69
--- /dev/null
+++ b/lib/gitlab/ci/pipeline/expression/lexeme/equals.rb
@@ -0,0 +1,27 @@
+module Gitlab
+ module Ci
+ module Pipeline
+ module Expression
+ module Lexeme
+ class Equals < Lexeme::Base
+ PATTERN = /==/.freeze
+ TYPE = :operator
+
+ def initialize(left, right)
+ @left = left
+ @right = right
+ end
+
+ def evaluate(**variables)
+ @left.evaluate(variables) == @right.evaluate(variables)
+ end
+
+ def self.build(_value, behind, ahead)
+ new(behind, ahead)
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/null.rb b/lib/gitlab/ci/pipeline/expression/lexeme/null.rb
new file mode 100644
index 00000000000..21286151d79
--- /dev/null
+++ b/lib/gitlab/ci/pipeline/expression/lexeme/null.rb
@@ -0,0 +1,22 @@
+module Gitlab
+ module Ci
+ module Pipeline
+ module Expression
+ module Lexeme
+ class Null < Lexeme::Base
+ PATTERN = /null/.freeze
+ TYPE = :value
+
+ def initialize(value = nil)
+ @value = value
+ end
+
+ def evaluate(**_)
+ nil
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/string.rb b/lib/gitlab/ci/pipeline/expression/lexeme/string.rb
new file mode 100644
index 00000000000..470a5a15cc1
--- /dev/null
+++ b/lib/gitlab/ci/pipeline/expression/lexeme/string.rb
@@ -0,0 +1,26 @@
+module Gitlab
+ module Ci
+ module Pipeline
+ module Expression
+ module Lexeme
+ class String < Lexeme::Base
+ PATTERN = /"(?<string>.+?)"/.freeze
+ TYPE = :value
+
+ def initialize(value)
+ @value = value
+ end
+
+ def evaluate(**_)
+ @value.to_s
+ end
+
+ def self.build(string)
+ new(string.match(PATTERN)[:string])
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/variable.rb b/lib/gitlab/ci/pipeline/expression/lexeme/variable.rb
new file mode 100644
index 00000000000..5fb5dd4bbbe
--- /dev/null
+++ b/lib/gitlab/ci/pipeline/expression/lexeme/variable.rb
@@ -0,0 +1,25 @@
+module Gitlab
+ module Ci
+ module Pipeline
+ module Expression
+ module Lexeme
+ class Variable < Lexeme::Base
+ PATTERN = /\$(?<name>\w+)/.freeze
+ TYPE = :value
+
+ def initialize(name)
+ @name = name
+ end
+
+ def evaluate(**variables)
+ end
+
+ def self.build(string)
+ new(string.match(PATTERN)[:name])
+ end
+ end
+ end
+ end
+ end
+ end
+end