fix: Strainer.add_filter method

This commit is contained in:
chenxianyu 2017-02-13 15:50:19 +08:00
parent b1ef28566e
commit aa79c33dda
2 changed files with 10 additions and 1 deletions

View File

@ -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(', ')}"

View File

@ -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