From aa79c33dda95b3b7ab2812e30db191a113763516 Mon Sep 17 00:00:00 2001 From: chenxianyu Date: Mon, 13 Feb 2017 15:50:19 +0800 Subject: [PATCH] fix: Strainer.add_filter method --- lib/liquid/strainer.rb | 2 +- test/unit/strainer_unit_test.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/liquid/strainer.rb b/lib/liquid/strainer.rb index 99a9c29..76d56d2 100644 --- a/lib/liquid/strainer.rb +++ b/lib/liquid/strainer.rb @@ -27,7 +27,7 @@ module Liquid def self.add_filter(filter) raise ArgumentError, "Expected module but got: #{filter.class}" unless filter.is_a?(Module) - unless self.class.include?(filter) + unless self.include?(filter) invokable_non_public_methods = (filter.private_instance_methods + filter.protected_instance_methods).select { |m| invokable?(m) } if invokable_non_public_methods.any? raise MethodOverrideError, "Filter overrides registered public methods as non public: #{invokable_non_public_methods.join(', ')}" diff --git a/test/unit/strainer_unit_test.rb b/test/unit/strainer_unit_test.rb index 6ccdc27..64ec150 100644 --- a/test/unit/strainer_unit_test.rb +++ b/test/unit/strainer_unit_test.rb @@ -145,4 +145,13 @@ class StrainerUnitTest < Minitest::Test Strainer.global_filter(LateAddedFilter) assert_equal 'filtered', Strainer.create(nil).invoke('late_added_filter', 'input') end + + def test_add_filter_returns_nil_when_a_filter_module_was_added + a = Module.new + strainer = Context.new.strainer + result1 = strainer.class.add_filter(a) + result2 = strainer.class.add_filter(a) + assert_kind_of Set, result1 + assert_kind_of NilClass, result2 + end end # StrainerTest