From 6ed6e7e12fa1f540254afb0c6b3d7306becb561a Mon Sep 17 00:00:00 2001 From: Michael Angell Date: Sat, 20 Aug 2016 20:32:46 +1000 Subject: [PATCH] Allow :id to start with the word contains --- lib/liquid/lexer.rb | 5 +++-- test/integration/parsing_quirks_test.rb | 4 ++++ test/unit/lexer_unit_test.rb | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/liquid/lexer.rb b/lib/liquid/lexer.rb index b9f2422..dee07f0 100644 --- a/lib/liquid/lexer.rb +++ b/lib/liquid/lexer.rb @@ -18,10 +18,10 @@ module Liquid DOUBLE_STRING_LITERAL = /"[^\"]*"/ NUMBER_LITERAL = /-?\d+(\.\d+)?/ DOTDOT = /\.\./ - COMPARISON_OPERATOR = /==|!=|<>|<=?|>=?|contains/ + COMPARISON_OPERATOR = /==|!=|<>|<=?|>=?|contains(?=\s)/ def initialize(input) - @ss = StringScanner.new(input.rstrip) + @ss = StringScanner.new(input) end def tokenize @@ -29,6 +29,7 @@ module Liquid until @ss.eos? @ss.skip(/\s*/) + break if @ss.eos? tok = case when t = @ss.scan(COMPARISON_OPERATOR) then [:comparison, t] when t = @ss.scan(SINGLE_STRING_LITERAL) then [:string, t] diff --git a/test/integration/parsing_quirks_test.rb b/test/integration/parsing_quirks_test.rb index 3531318..23742dc 100644 --- a/test/integration/parsing_quirks_test.rb +++ b/test/integration/parsing_quirks_test.rb @@ -115,4 +115,8 @@ class ParsingQuirksTest < Minitest::Test assert_template_result('12345', "{% for i in (1...5) %}{{ i }}{% endfor %}") end end + + def test_contains_in_id + assert_template_result(' YES ', '{% if containsallshipments == true %} YES {% endif %}', 'containsallshipments' => true) + end end # ParsingQuirksTest diff --git a/test/unit/lexer_unit_test.rb b/test/unit/lexer_unit_test.rb index af9c267..5adcf2b 100644 --- a/test/unit/lexer_unit_test.rb +++ b/test/unit/lexer_unit_test.rb @@ -19,7 +19,7 @@ class LexerUnitTest < Minitest::Test end def test_comparison - tokens = Lexer.new('== <> contains').tokenize + tokens = Lexer.new('== <> contains ').tokenize assert_equal [[:comparison, '=='], [:comparison, '<>'], [:comparison, 'contains'], [:end_of_string]], tokens end