diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2018-02-21 12:51:56 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2018-02-21 12:51:56 +0100 |
commit | cee3be29ec4a2b31c7e67cd66a36a5c95e8f3b05 (patch) | |
tree | 3f5d0ff90330fe04a2e5ed55071254ff402cb3c5 /lib | |
parent | 9954928cceb2a5de7788ffdfdeb8a99e9ccf8b08 (diff) | |
download | gitlab-ce-cee3be29ec4a2b31c7e67cd66a36a5c95e8f3b05.tar.gz |
Add a lexeme for a string pipeline expression
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/ci/pipeline/expression/lexer.rb | 30 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/expression/string.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/expression/token.rb | 2 |
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 |