From 8a2947865bc57ef25568aa1d56b64170acc1b1b0 Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Wed, 3 Jun 2015 02:21:51 -0400 Subject: [PATCH] Avoid an exception from checking if a string contains a non-string. --- lib/liquid/condition.rb | 7 ++++++- test/unit/condition_unit_test.rb | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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)