diff --git a/lib/liquid/condition.rb b/lib/liquid/condition.rb index c76376a..092c1b6 100644 --- a/lib/liquid/condition.rb +++ b/lib/liquid/condition.rb @@ -16,7 +16,12 @@ module Liquid '>='.freeze => :>=, '<='.freeze => :<=, 'contains'.freeze => lambda do |cond, left, right| - left && right && left.respond_to?(:include?) ? left.include?(right) : false + if left && right && left.respond_to?(:include?) + right = right.to_s if left.is_a?(String) + left.include?(right) + else + false + end end } diff --git a/test/unit/condition_unit_test.rb b/test/unit/condition_unit_test.rb index 2ffecf6..4ada433 100644 --- a/test/unit/condition_unit_test.rb +++ b/test/unit/condition_unit_test.rb @@ -85,6 +85,11 @@ class ConditionUnitTest < Minitest::Test assert_evalutes_false 1, 'contains', 0 end + def test_contains_with_string_left_operand_coerces_right_operand_to_string + assert_evalutes_true ' 1 ', 'contains', 1 + assert_evalutes_false ' 1 ', 'contains', 2 + end + def test_or_condition condition = Condition.new(1, '==', 2)