summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-03-01 14:42:11 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-03-01 14:42:11 +0100
commit511046f9eb8366f3b5fee44b66b763069de6829a (patch)
tree815461f4d12352ebdf717a9294191635095735e8
parentc6ea7a2a134a0806c1fc9dbdf99213e3c8e4b8ec (diff)
downloadgitlab-ce-511046f9eb8366f3b5fee44b66b763069de6829a.tar.gz
Make max tokens in expressions lexer a class-level attribute
-rw-r--r--lib/gitlab/ci/pipeline/expression/lexer.rb11
-rw-r--r--spec/lib/gitlab/ci/pipeline/expression/lexer_spec.rb4
2 files changed, 8 insertions, 7 deletions
diff --git a/lib/gitlab/ci/pipeline/expression/lexer.rb b/lib/gitlab/ci/pipeline/expression/lexer.rb
index cabb91d0dd7..e1c68b7c3c2 100644
--- a/lib/gitlab/ci/pipeline/expression/lexer.rb
+++ b/lib/gitlab/ci/pipeline/expression/lexer.rb
@@ -16,12 +16,13 @@ module Gitlab
MAX_TOKENS = 100
- def initialize(statement)
+ def initialize(statement, max_tokens: MAX_TOKENS)
@scanner = StringScanner.new(statement)
+ @max_tokens = max_tokens
end
- def tokens(max: MAX_TOKENS)
- strong_memoize(:tokens) { tokenize(max) }
+ def tokens
+ strong_memoize(:tokens) { tokenize }
end
def lexemes
@@ -30,10 +31,10 @@ module Gitlab
private
- def tokenize(max_tokens)
+ def tokenize
tokens = []
- max_tokens.times do
+ @max_tokens.times do
@scanner.skip(/\s+/) # ignore whitespace
return tokens if @scanner.eos?
diff --git a/spec/lib/gitlab/ci/pipeline/expression/lexer_spec.rb b/spec/lib/gitlab/ci/pipeline/expression/lexer_spec.rb
index 65f90b0caf3..230ceeb07f8 100644
--- a/spec/lib/gitlab/ci/pipeline/expression/lexer_spec.rb
+++ b/spec/lib/gitlab/ci/pipeline/expression/lexer_spec.rb
@@ -46,9 +46,9 @@ describe Gitlab::Ci::Pipeline::Expression::Lexer do
end
it 'limits statement to specified amount of tokens' do
- lexer = described_class.new("$V1 $V2 $V3 $V4 $V5 $V6")
+ lexer = described_class.new("$V1 $V2 $V3 $V4", max_tokens: 3)
- expect { lexer.tokens(max: 5) }
+ expect { lexer.tokens }
.to raise_error described_class::SyntaxError
end