Broken warnings implementation.

This commit is contained in:
Tristan Hume
2013-08-22 12:12:35 -04:00
parent 14a17520de
commit 93fcd5687c
4 changed files with 30 additions and 3 deletions
+15
View File
@@ -56,6 +56,21 @@ module Liquid
assert_missing_delimitation!
end
# warnings of this block and all sub-tags
def warnings
all_warnings = []
all_warnings.concat(@warnings) if @warnings
return all_warnings unless @nodelist
@nodelist.each do |node|
p node
node_warns = node.respond_to?(:warnings) ? node.warnings : nil
all_warnings.concat(node_warns) if node_warns
end
all_warnings
end
def end_tag
end
+4
View File
@@ -33,6 +33,10 @@ module Liquid
@blank || true
end
def warnings
@warnings
end
def parse_with_selected_parser(markup)
case @options[:error_mode] || Template.error_mode
when :strict then strict_parse_with_error_context(markup)
+8
View File
@@ -69,9 +69,17 @@ module Liquid
# Returns self for easy chaining
def parse(source, options = {})
@root = Document.new(tokenize(source), options)
@warnings = nil
self
end
# memoize because the warnings operation
# could be expensive.
def warnings
return [] unless @root
@warnings ||= @root.warnings
end
def registers
@registers ||= {}
end
+3 -3
View File
@@ -92,10 +92,10 @@ class ErrorHandlingTest < Test::Unit::TestCase
end
def test_warnings
template = Liquid::Template.parse('{% if ~~~ %}derp{% else %}wat{% endif %}', :error_mode => :warn)
template = Liquid::Template.parse('{% if ~~~ %}{{%%%}}{% else %}wat{% endif %}', :error_mode => :warn)
assert_equal 2, template.warnings.size
assert_equal 'Unexpected character ~ in "~~~"', template.warnings.first.message
assert_equal 'wat', template.render
assert_equal 1, template.errors.size
assert_equal 'Unexpected character ~ in "~~~"', template.errors.first.message
end
# Liquid should not catch Exceptions that are not subclasses of StandardError, like Interrupt and NoMemoryError