mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-20 03:10:39 -07:00
Disable rendering of tag based on register
This commit is contained in:
@@ -78,8 +78,10 @@ require 'liquid/tokenizer'
|
|||||||
require 'liquid/parse_context'
|
require 'liquid/parse_context'
|
||||||
require 'liquid/partial_cache'
|
require 'liquid/partial_cache'
|
||||||
require 'liquid/usage'
|
require 'liquid/usage'
|
||||||
|
require 'liquid/register'
|
||||||
require 'liquid/static_registers'
|
require 'liquid/static_registers'
|
||||||
|
|
||||||
# Load all the tags of the standard library
|
# Load all the tags of the standard library
|
||||||
#
|
#
|
||||||
Dir["#{__dir__}/liquid/tags/*.rb"].each { |f| require f }
|
Dir["#{__dir__}/liquid/tags/*.rb"].each { |f| require f }
|
||||||
|
Dir["#{__dir__}/liquid/registers/*.rb"].each { |f| require f }
|
||||||
|
|||||||
@@ -25,3 +25,5 @@
|
|||||||
render: "Syntax error in tag 'render' - Template name must be a quoted string"
|
render: "Syntax error in tag 'render' - Template name must be a quoted string"
|
||||||
argument:
|
argument:
|
||||||
include: "Argument error in tag 'include' - Illegal template name"
|
include: "Argument error in tag 'include' - Illegal template name"
|
||||||
|
disabled:
|
||||||
|
include: "'include' usage has been disabled in this context, consider using 'render'."
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Liquid
|
||||||
|
class Register
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
module Liquid
|
||||||
|
class DisabledTags < Register
|
||||||
|
def initialize
|
||||||
|
@disabled_tags = Hash.new { |h, k| h[k] = 0 }
|
||||||
|
end
|
||||||
|
|
||||||
|
def disabled?(tag)
|
||||||
|
@disabled_tags[tag] > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
def disable(tag)
|
||||||
|
incr(tag)
|
||||||
|
yield
|
||||||
|
ensure
|
||||||
|
decr(tag)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def incr(tag)
|
||||||
|
@disabled_tags[tag] = @disabled_tags[tag] + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
def decr(tag)
|
||||||
|
@disabled_tags[tag] = @disabled_tags[tag] - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Template.register_register('disabled_tags', DisabledTags.new)
|
||||||
|
end
|
||||||
@@ -45,6 +45,7 @@ module Liquid
|
|||||||
end
|
end
|
||||||
|
|
||||||
def render_to_output_buffer(context, output)
|
def render_to_output_buffer(context, output)
|
||||||
|
return output << options[:locale].t("errors.disabled.include") if context.registers['disabled_tags']&.disabled?('include')
|
||||||
template_name = context.evaluate(@template_name_expr)
|
template_name = context.evaluate(@template_name_expr)
|
||||||
raise ArgumentError, options[:locale].t("errors.argument.include") unless template_name
|
raise ArgumentError, options[:locale].t("errors.argument.include") unless template_name
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,13 @@ module Liquid
|
|||||||
end
|
end
|
||||||
|
|
||||||
def render_to_output_buffer(context, output)
|
def render_to_output_buffer(context, output)
|
||||||
|
context.registers['disabled_tags']&.disable('include') do
|
||||||
|
return render_tag(context, output)
|
||||||
|
end
|
||||||
|
render_tag(context, output)
|
||||||
|
end
|
||||||
|
|
||||||
|
def render_tag(context, output)
|
||||||
# Though we evaluate this here we will only ever parse it as a string literal.
|
# Though we evaluate this here we will only ever parse it as a string literal.
|
||||||
template_name = context.evaluate(@template_name_expr)
|
template_name = context.evaluate(@template_name_expr)
|
||||||
raise ArgumentError, options[:locale].t("errors.argument.include") unless template_name
|
raise ArgumentError, options[:locale].t("errors.argument.include") unless template_name
|
||||||
|
|||||||
@@ -92,6 +92,14 @@ module Liquid
|
|||||||
@tags ||= TagRegistry.new
|
@tags ||= TagRegistry.new
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def register_register(name, klass)
|
||||||
|
registers[name.to_s] = klass
|
||||||
|
end
|
||||||
|
|
||||||
|
def registers
|
||||||
|
@registers ||= {}
|
||||||
|
end
|
||||||
|
|
||||||
def error_mode
|
def error_mode
|
||||||
@error_mode ||= :lax
|
@error_mode ||= :lax
|
||||||
end
|
end
|
||||||
@@ -203,6 +211,8 @@ module Liquid
|
|||||||
context.add_filters(args.pop)
|
context.add_filters(args.pop)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
registers.merge!(Template.registers) if Template.registers.is_a?(Hash)
|
||||||
|
|
||||||
# Retrying a render resets resource usage
|
# Retrying a render resets resource usage
|
||||||
context.resource_limits.reset
|
context.resource_limits.reset
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user