diff options
author | Lyle Mullican <ldmullican@gmail.com> | 2018-11-19 17:16:34 -0500 |
---|---|---|
committer | Lyle Mullican <ldmullican@gmail.com> | 2018-11-19 17:16:34 -0500 |
commit | 4fdc6269b669a8bab7ef4af53868356f6c47f9f5 (patch) | |
tree | 9dc476157badb90fc7bf3a7582064531a61bfd37 /actionview | |
parent | c4720a25ed8738095bd8e441c1406a7a7471d904 (diff) | |
download | rails-4fdc6269b669a8bab7ef4af53868356f6c47f9f5.tar.gz rails-4fdc6269b669a8bab7ef4af53868356f6c47f9f5.tar.bz2 rails-4fdc6269b669a8bab7ef4af53868356f6c47f9f5.zip |
Prevent TextHelper#word_wrap from stripping white space on the left
side of long lines; Fixes #34487
Diffstat (limited to 'actionview')
-rw-r--r-- | actionview/CHANGELOG.md | 18 | ||||
-rw-r--r-- | actionview/lib/action_view/helpers/text_helper.rb | 2 | ||||
-rw-r--r-- | actionview/test/template/text_helper_test.rb | 4 |
3 files changed, 23 insertions, 1 deletions
diff --git a/actionview/CHANGELOG.md b/actionview/CHANGELOG.md index 1f537e725a..237a25ba4f 100644 --- a/actionview/CHANGELOG.md +++ b/actionview/CHANGELOG.md @@ -1,3 +1,21 @@ +* Prevent `ActionView::TextHelper#word_wrap` from unexpectedly stripping white space from the _left_ side of lines. + + For example, given input like this: + + ``` + This is a paragraph with an initial indent, + followed by additional lines that are not indented, + and finally terminated with a blockquote: + "A pithy saying" + ``` + + Calling `word_wrap` should not trim the indents on the first and last lines. + + Fixes #34487 + + *Lyle Mullican* + + * Add allocations to template rendering instrumentation. Adds the allocations for template and partial rendering to the server output on render. diff --git a/actionview/lib/action_view/helpers/text_helper.rb b/actionview/lib/action_view/helpers/text_helper.rb index a338d076e4..3d378dcb2f 100644 --- a/actionview/lib/action_view/helpers/text_helper.rb +++ b/actionview/lib/action_view/helpers/text_helper.rb @@ -259,7 +259,7 @@ module ActionView # # => Once\r\nupon\r\na\r\ntime def word_wrap(text, line_width: 80, break_sequence: "\n") text.split("\n").collect! do |line| - line.length > line_width ? line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1#{break_sequence}").strip : line + line.length > line_width ? line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1#{break_sequence}").rstrip : line end * break_sequence end diff --git a/actionview/test/template/text_helper_test.rb b/actionview/test/template/text_helper_test.rb index 2925489f5d..e961a770e6 100644 --- a/actionview/test/template/text_helper_test.rb +++ b/actionview/test/template/text_helper_test.rb @@ -361,6 +361,10 @@ class TextHelperTest < ActionView::TestCase assert_equal("my very very\nvery long\nstring\n\nwith another\nline", word_wrap("my very very very long string\n\nwith another line", line_width: 15)) end + def test_word_wrap_with_leading_spaces + assert_equal(" This is a paragraph\nthat includes some\nindented lines:\n Like this sample\n blockquote", word_wrap(" This is a paragraph that includes some\nindented lines:\n Like this sample\n blockquote", line_width: 25)) + end + def test_word_wrap_does_not_modify_the_options_hash options = { line_width: 15 } passed_options = options.dup |