From 2bb35520336e1e845a5e873e9315f3a7643eb11e Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Mon, 16 Jan 2017 13:13:17 -0500 Subject: [PATCH] Fix internal liquid error when comparing hash with incompatible type (#849) --- lib/liquid/condition.rb | 2 +- test/unit/condition_unit_test.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/liquid/condition.rb b/lib/liquid/condition.rb index 9573f6b..7db9cf3 100644 --- a/lib/liquid/condition.rb +++ b/lib/liquid/condition.rb @@ -110,7 +110,7 @@ module Liquid if operation.respond_to?(:call) operation.call(self, left, right) - elsif left.respond_to?(operation) && right.respond_to?(operation) + elsif left.respond_to?(operation) && right.respond_to?(operation) && !left.is_a?(Hash) && !right.is_a?(Hash) begin left.send(operation, right) rescue ::ArgumentError => e diff --git a/test/unit/condition_unit_test.rb b/test/unit/condition_unit_test.rb index 8dfc788..99ab9b7 100644 --- a/test/unit/condition_unit_test.rb +++ b/test/unit/condition_unit_test.rb @@ -64,6 +64,13 @@ class ConditionUnitTest < Minitest::Test assert_evaluates_argument_error '1', '<=', 0 end + def test_hash_compare_backwards_compatibility + assert_equal nil, Condition.new({}, '>', 2).evaluate + assert_equal nil, Condition.new(2, '>', {}).evaluate + assert_equal false, Condition.new({}, '==', 2).evaluate + assert_equal true, Condition.new({ 'a' => 2 }, 'contains', 'a').evaluate + end + def test_contains_works_on_arrays @context = Liquid::Context.new @context['array'] = [1, 2, 3, 4, 5]