mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
implements String#strip_heredoc
This commit is contained in:
parent
a302a333f8
commit
475ea14fd0
5 changed files with 76 additions and 1 deletions
|
@ -1,5 +1,7 @@
|
|||
*Rails 3.0.0 (unreleased)*
|
||||
|
||||
* Implemented String#strip_heredoc. [fxn]
|
||||
|
||||
* Pluggable cache stores: setting config.cache_store = "custom_store" will require 'active_support/cache/custom_store' and look for the CustomStore constant. #5486 [Mike Perham]
|
||||
|
||||
|
||||
|
|
|
@ -9,4 +9,5 @@ require 'active_support/core_ext/string/behavior'
|
|||
require 'active_support/core_ext/string/interpolation'
|
||||
require 'active_support/core_ext/string/output_safety'
|
||||
require 'active_support/core_ext/string/exclude'
|
||||
require 'active_support/core_ext/string/encoding'
|
||||
require 'active_support/core_ext/string/encoding'
|
||||
require 'active_support/core_ext/string/strip'
|
||||
|
|
24
activesupport/lib/active_support/core_ext/string/strip.rb
Normal file
24
activesupport/lib/active_support/core_ext/string/strip.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
class String
|
||||
# Strips indentation in heredocs.
|
||||
#
|
||||
# For example in
|
||||
#
|
||||
# if options[:usage]
|
||||
# puts <<-USAGE.strip_heredoc
|
||||
# This command does such and such.
|
||||
#
|
||||
# Supported options are:
|
||||
# -h This message
|
||||
# ...
|
||||
# USAGE
|
||||
# end
|
||||
#
|
||||
# the user would see the usage message aligned against the left margin.
|
||||
#
|
||||
# Technically, it looks for the least indented line in the whole string, and removes
|
||||
# that amount of leading whitespace.
|
||||
def strip_heredoc
|
||||
indent = chomp.scan(/^\s*/).min.size
|
||||
gsub(/^\s{#{indent}}/, '')
|
||||
end
|
||||
end
|
|
@ -6,10 +6,33 @@ require 'inflector_test_cases'
|
|||
require 'active_support/core_ext/string'
|
||||
require 'active_support/time'
|
||||
require 'active_support/core_ext/kernel/reporting'
|
||||
require 'active_support/core_ext/string/strip'
|
||||
|
||||
class StringInflectionsTest < Test::Unit::TestCase
|
||||
include InflectorTestCases
|
||||
|
||||
def test_strip_heredoc_on_an_empty_string
|
||||
assert_equal '', ''.strip_heredoc
|
||||
end
|
||||
|
||||
def test_strip_heredoc_on_a_string_with_no_lines
|
||||
assert_equal 'x', 'x'.strip_heredoc
|
||||
assert_equal 'x', ' x'.strip_heredoc
|
||||
end
|
||||
|
||||
def test_strip_heredoc_on_a_heredoc_with_no_margin
|
||||
assert_equal "foo\nbar", "foo\nbar".strip_heredoc
|
||||
assert_equal "foo\n bar", "foo\n bar".strip_heredoc
|
||||
end
|
||||
|
||||
def test_strip_heredoc_on_a_regular_indented_heredoc
|
||||
assert_equal "foo\n bar\nbaz\n", <<-EOS.strip_heredoc
|
||||
foo
|
||||
bar
|
||||
baz
|
||||
EOS
|
||||
end
|
||||
|
||||
def test_pluralize
|
||||
SingularToPlural.each do |singular, plural|
|
||||
assert_equal(plural, singular.pluralize)
|
||||
|
|
|
@ -1296,6 +1296,31 @@ Active Support defines 3rd person aliases of +String#start_with?+ and +String#en
|
|||
|
||||
NOTE: Defined in +active_support/core_ext/string/starts_ends_with.rb+.
|
||||
|
||||
h4. +strip_heredoc+
|
||||
|
||||
The method +strip_heredoc+ strips indentation in heredocs.
|
||||
|
||||
For example in
|
||||
|
||||
<ruby>
|
||||
if options[:usage]
|
||||
puts <<-USAGE.strip_heredoc
|
||||
This command does such and such.
|
||||
|
||||
Supported options are:
|
||||
-h This message
|
||||
...
|
||||
USAGE
|
||||
end
|
||||
</ruby>
|
||||
|
||||
the user would see the usage message aligned against the left margin.
|
||||
|
||||
Technically, it looks for the least indented line in the whole string, and removes
|
||||
that amount of leading whitespace.
|
||||
|
||||
NOTE: Defined in +active_support/core_ext/string/strip.rb+.
|
||||
|
||||
h4. Access
|
||||
|
||||
h5. +at(position)+
|
||||
|
|
Loading…
Reference in a new issue