Merge pull request #610 from boobooninja/gf3

Merge pull request 610
This commit is contained in:
Justin Li
2015-08-03 20:50:14 -04:00
5 changed files with 49 additions and 15 deletions
+6 -1
View File
@@ -13,7 +13,7 @@ module Liquid
# context['bob'] #=> nil class Context
class Context
attr_reader :scopes, :errors, :registers, :environments, :resource_limits
attr_accessor :exception_handler, :template_name, :partial
attr_accessor :exception_handler, :template_name, :partial, :global_filter
def initialize(environments = {}, outer_scope = {}, registers = {}, rethrow_errors = false, resource_limits = nil)
@environments = [environments].flatten
@@ -32,6 +32,7 @@ module Liquid
@interrupts = []
@filters = []
@global_filter = nil
end
def warnings
@@ -52,6 +53,10 @@ module Liquid
@strainer = nil
end
def apply_global_filter(obj)
global_filter.nil? ? obj : global_filter.call(obj)
end
# are there any not handled interrupts?
def interrupt?
!@interrupts.empty?
+7 -12
View File
@@ -179,20 +179,15 @@ module Liquid
when Hash
options = args.pop
if options[:registers].is_a?(Hash)
registers.merge!(options[:registers])
end
registers.merge!(options[:registers]) if options[:registers].is_a?(Hash)
if options[:filters]
context.add_filters(options[:filters])
end
context.add_filters(options[:filters]) if options[:filters]
if options[:exception_handler]
context.exception_handler = options[:exception_handler]
end
when Module
context.add_filters(args.pop)
when Array
context.global_filter = options[:global_filter] if options[:global_filter]
context.exception_handler = options[:exception_handler] if options[:exception_handler]
when Module, Array
context.add_filters(args.pop)
end
+8 -2
View File
@@ -73,10 +73,16 @@ module Liquid
end
def render(context)
@filters.inject(context.evaluate(@name)) do |output, (filter_name, filter_args, filter_kwargs)|
obj = @filters.inject(context.evaluate(@name)) do |output, (filter_name, filter_args, filter_kwargs)|
filter_args = evaluate_filter_expressions(context, filter_args, filter_kwargs)
context.invoke(filter_name, output, *filter_args)
end.tap{ |obj| taint_check(context, obj) }
end
obj = context.apply_global_filter(obj)
taint_check(context, obj)
obj
end
private