lib/liquid/strainer.rb in locomotivecms-liquid-2.6.0 vs lib/liquid/strainer.rb in locomotivecms-liquid-4.0.0.alpha

- old
+ new

@@ -9,10 +9,15 @@ # Context#add_filters or Template.register_filter class Strainer #:nodoc: @@filters = [] @@known_filters = Set.new @@known_methods = Set.new + @@strainer_class_cache = Hash.new do |hash, filters| + hash[filters] = Class.new(Strainer) do + filters.each { |f| include f } + end + end def initialize(context) @context = context end @@ -30,21 +35,26 @@ @@known_methods.merge(new_methods) @@known_filters.add(filter) end end - def self.create(context) - strainer = Strainer.new(context) - @@filters.each { |m| strainer.extend(m) } - strainer + def self.strainer_class_cache + @@strainer_class_cache end + def self.create(context, filters = []) + filters = @@filters + filters + strainer_class_cache[filters].new(context) + end + def invoke(method, *args) if invokable?(method) send(method, *args) else args.first end + rescue ::ArgumentError => e + raise Liquid::ArgumentError.new(e.message) end def invokable?(method) @@known_methods.include?(method.to_s) && respond_to?(method) end