From b146b49f465419b94c5b778e3e82fc7d1e8832be Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Thu, 24 Nov 2016 10:32:11 -0500 Subject: [PATCH] fix: Clear the strainer cache when a global filter is added (#826) --- lib/liquid/strainer.rb | 1 + test/unit/strainer_unit_test.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/liquid/strainer.rb b/lib/liquid/strainer.rb index 441e335..99a9c29 100644 --- a/lib/liquid/strainer.rb +++ b/lib/liquid/strainer.rb @@ -39,6 +39,7 @@ module Liquid end def self.global_filter(filter) + @@strainer_class_cache.clear @@global_strainer.add_filter(filter) end diff --git a/test/unit/strainer_unit_test.rb b/test/unit/strainer_unit_test.rb index 5cdf2e8..6ccdc27 100644 --- a/test/unit/strainer_unit_test.rb +++ b/test/unit/strainer_unit_test.rb @@ -133,4 +133,16 @@ class StrainerUnitTest < Minitest::Test strainer.class.add_filter(PublicMethodOverrideFilter) assert strainer.class.filter_methods.include?('public_filter') end + + module LateAddedFilter + def late_added_filter(input) + "filtered" + end + end + + def test_global_filter_clears_cache + assert_equal 'input', Strainer.create(nil).invoke('late_added_filter', 'input') + Strainer.global_filter(LateAddedFilter) + assert_equal 'filtered', Strainer.create(nil).invoke('late_added_filter', 'input') + end end # StrainerTest