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-21 14:51:56 +0300
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-02-21 14:51:56 +0300
commitcee3be29ec4a2b31c7e67cd66a36a5c95e8f3b05 (patch)
tree3f5d0ff90330fe04a2e5ed55071254ff402cb3c5 /lib/gitlab/ci/pipeline/expression
parent9954928cceb2a5de7788ffdfdeb8a99e9ccf8b08 (diff)
Add a lexeme for a string pipeline expression
Diffstat (limited to 'lib/gitlab/ci/pipeline/expression')
-rw-r--r--lib/gitlab/ci/pipeline/expression/lexer.rb30
-rw-r--r--lib/gitlab/ci/pipeline/expression/string.rb2
-rw-r--r--lib/gitlab/ci/pipeline/expression/token.rb2
3 files changed, 19 insertions, 15 deletions
diff --git a/lib/gitlab/ci/pipeline/expression/lexer.rb b/lib/gitlab/ci/pipeline/expression/lexer.rb
index 26895174881..8432b36b066 100644
--- a/lib/gitlab/ci/pipeline/expression/lexer.rb
+++ b/lib/gitlab/ci/pipeline/expression/lexer.rb
@@ -2,32 +2,34 @@ module Gitlab
module Ci
module Pipeline
module Expression
- LEXEMES = [
- Expression::Variable
- ]
+ class Lexer
+ LEXEMES = [
+ Expression::Variable,
+ Expression::String
+ ]
- MAX_CYCLES = 5
+ MAX_CYCLES = 5
+ SyntaxError = Class.new(StandardError)
- class Lexer
def initialize(statement)
@scanner = StringScanner.new(statement)
@tokens = []
end
def tokenize
- @tokens.tap do
- MAX_CYCLES.times do
- LEXEMES.each do |lexeme|
- @scanner.scan(/\s+/) # ignore whitespace
-
- lexeme.scan(@scanner).tap do |token|
- @tokens.push(token) if token.present?
- end
+ MAX_CYCLES.times do
+ LEXEMES.each do |lexeme|
+ @scanner.scan(/\s+/) # ignore whitespace
- return @tokens if @scanner.eos?
+ lexeme.scan(@scanner).tap do |token|
+ @tokens.push(token) if token.present?
end
+
+ return @tokens if @scanner.eos?
end
end
+
+ raise Lexer::SyntaxError unless @scanner.eos?
end
end
end
diff --git a/lib/gitlab/ci/pipeline/expression/string.rb b/lib/gitlab/ci/pipeline/expression/string.rb
index a603ef6cf4c..e6cc50c56d8 100644
--- a/lib/gitlab/ci/pipeline/expression/string.rb
+++ b/lib/gitlab/ci/pipeline/expression/string.rb
@@ -3,7 +3,7 @@ module Gitlab
module Pipeline
module Expression
class String < Expression::Lexeme
- PATTERN = /("|')(?<value>.+)('|")/.freeze
+ PATTERN = /"(?<string>.+?)"/.freeze
def initialize(value)
@value = value
diff --git a/lib/gitlab/ci/pipeline/expression/token.rb b/lib/gitlab/ci/pipeline/expression/token.rb
index c800d1f0c08..03a47a17d40 100644
--- a/lib/gitlab/ci/pipeline/expression/token.rb
+++ b/lib/gitlab/ci/pipeline/expression/token.rb
@@ -3,6 +3,8 @@ module Gitlab
module Pipeline
module Expression
class Token
+ attr_reader :value, :type
+
def initialize(value, type)
@value = value
@type = type