提交 e350c4d6 编写于 作者: G Gannon McGibbon 提交者: Eugene Kenny

Merge pull request #36532 from itsWill/add_to_a_to_annotated_source_code

Empty array instead of nil for source_extract
上级 c7bef8aa
* annotated_source_code returns an empty array so TemplateErrors without a
template in the backtrace are surfaced properly by DebugExceptions.
*Guilherme Mansur*, *Kasper Timm Hansen*
* Add autoload for SyntaxErrorInTemplate so syntax errors are correctly raised by DebugExceptions.
*Guilherme Mansur*, *Gannon McGibbon*
......
......@@ -81,8 +81,8 @@ def sub_template_message
end
end
def source_extract(indentation = 0, output = :console)
return unless num = line_number
def source_extract(indentation = 0)
return [] unless num = line_number
num = num.to_i
source_code = @template.source.split("\n")
......@@ -91,9 +91,9 @@ def source_extract(indentation = 0, output = :console)
end_on_line = [ num + SOURCE_CODE_RADIUS - 1, source_code.length].min
indent = end_on_line.to_s.size + indentation
return unless source_code = source_code[start_on_line..end_on_line]
return [] unless source_code = source_code[start_on_line..end_on_line]
formatted_code_for(source_code, start_on_line, indent, output)
formatted_code_for(source_code, start_on_line, indent)
end
def sub_template_of(template_path)
......@@ -122,15 +122,11 @@ def source_location
end + file_name
end
def formatted_code_for(source_code, line_counter, indent, output)
start_value = (output == :html) ? {} : []
source_code.inject(start_value) do |result, line|
def formatted_code_for(source_code, line_counter, indent)
indent_template = "%#{indent}s: %s"
source_code.map do |line|
line_counter += 1
if output == :html
result.update(line_counter.to_s => "%#{indent}s %s\n" % ["", line])
else
result << "%#{indent}s: %s" % [line_counter, line]
end
indent_template % [line_counter, line]
end
end
end
......
......@@ -34,4 +34,20 @@ def test_provides_useful_inspect
assert_equal "#<ActionView::Template::Error: original>", error.inspect
end
def test_annotated_source_code_returns_empty_array_if_source_cant_be_found
template = Class.new do
def identifier
"something"
end
end.new
error = begin
raise
rescue
raise ActionView::Template::Error.new(template) rescue $!
end
assert_equal [], error.annotated_source_code
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册