mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-20 19:30:47 -07:00
Strainer#add_filter should raise when registered method is overriden as private
This commit is contained in:
@@ -59,4 +59,5 @@ module Liquid
|
||||
UndefinedVariable = Class.new(Error)
|
||||
UndefinedDropMethod = Class.new(Error)
|
||||
UndefinedFilter = Class.new(Error)
|
||||
MethodOverrideError = Class.new(Error)
|
||||
end
|
||||
|
||||
@@ -28,8 +28,13 @@ 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)
|
||||
send(:include, filter)
|
||||
@filter_methods.merge(filter.public_instance_methods.map(&:to_s))
|
||||
invokable_private_methods = filter.private_instance_methods.select { |m| invokable?(m) }
|
||||
if invokable_private_methods.any?
|
||||
raise MethodOverrideError, "Filter overrides registered public methods as private: #{invokable_private_methods.join(', ')}"
|
||||
else
|
||||
send(:include, filter)
|
||||
@filter_methods.merge(filter.public_instance_methods.map(&:to_s))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user