diff options
author | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-08-15 09:15:31 -0700 |
---|---|---|
committer | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-08-15 09:15:31 -0700 |
commit | ebb4a3d5becd535074502a4bf1b61a5b18e30917 (patch) | |
tree | 0037cc170ee3131bcf731a1e89768abc4894afe1 | |
parent | bf5f6562c0e7e5b9ac623d5e036a784e25dea937 (diff) | |
parent | 6446e84c1a0d72ecdba1046c3e15b4467eae9e5b (diff) | |
download | rails-ebb4a3d5becd535074502a4bf1b61a5b18e30917.tar.gz rails-ebb4a3d5becd535074502a4bf1b61a5b18e30917.tar.bz2 rails-ebb4a3d5becd535074502a4bf1b61a5b18e30917.zip |
Merge pull request #7244 from lucasuyezu/master
Fix indentation on template errors to consider line number character count.
For instance, when an error is shown, if the related source code snippet has line numbers from, lets say, 8-12, the lines are left aligned, which means the code indent is wrong:
8: foo
9: bar
10: raise
11: baz
12: ...
This changes it to right align the source code snippet, so that the indentation is correct:
8: foo
9: bar
10: raise
11: baz
12: ...
-rw-r--r-- | actionpack/lib/action_view/template/error.rb | 4 | ||||
-rw-r--r-- | actionpack/test/fixtures/test/_raise_indentation.html.erb | 13 | ||||
-rw-r--r-- | actionpack/test/template/render_test.rb | 9 |
3 files changed, 24 insertions, 2 deletions
diff --git a/actionpack/lib/action_view/template/error.rb b/actionpack/lib/action_view/template/error.rb index d8258f7b11..f2bef4bded 100644 --- a/actionpack/lib/action_view/template/error.rb +++ b/actionpack/lib/action_view/template/error.rb @@ -84,13 +84,13 @@ module ActionView start_on_line = [ num - SOURCE_CODE_RADIUS - 1, 0 ].max end_on_line = [ num + SOURCE_CODE_RADIUS - 1, source_code.length].min - indent = ' ' * indentation + indent = end_on_line.to_s.size + indentation line_counter = start_on_line return unless source_code = source_code[start_on_line..end_on_line] source_code.sum do |line| line_counter += 1 - "#{indent}#{line_counter}: #{line}\n" + "%#{indent}s: %s\n" % [line_counter, line] end end diff --git a/actionpack/test/fixtures/test/_raise_indentation.html.erb b/actionpack/test/fixtures/test/_raise_indentation.html.erb new file mode 100644 index 0000000000..f9a93728fe --- /dev/null +++ b/actionpack/test/fixtures/test/_raise_indentation.html.erb @@ -0,0 +1,13 @@ +<p>First paragraph</p> +<p>Second paragraph</p> +<p>Third paragraph</p> +<p>Fourth paragraph</p> +<p>Fifth paragraph</p> +<p>Sixth paragraph</p> +<p>Seventh paragraph</p> +<p>Eight paragraph</p> +<p>Ninth paragraph</p> +<p>Tenth paragraph</p> +<%= raise "error here!" %> +<p>Eleventh paragraph</p> +<p>Twelfth paragraph</p>
\ No newline at end of file diff --git a/actionpack/test/template/render_test.rb b/actionpack/test/template/render_test.rb index 164b8b9fa1..b26354e7cc 100644 --- a/actionpack/test/template/render_test.rb +++ b/actionpack/test/template/render_test.rb @@ -203,6 +203,15 @@ module RenderTestCases assert_equal File.expand_path("#{FIXTURE_LOAD_PATH}/test/_raise.html.erb"), e.file_name end + def test_render_error_indentation + e = assert_raises(ActionView::Template::Error) { @view.render(:partial => "test/raise_indentation") } + error_lines = e.annoted_source_code.split("\n") + assert_match %r!error\shere!, e.message + assert_equal "11", e.line_number + assert_equal " 9: <p>Ninth paragraph</p>", error_lines.second + assert_equal " 10: <p>Tenth paragraph</p>", error_lines.third + end + def test_render_sub_template_with_errors e = assert_raises(ActionView::Template::Error) { @view.render(:template => "test/sub_template_raise") } assert_match %r!method.*doesnt_exist!, e.message |