<<~ or String#strip_heredoc
Ruby2.3以降であれば<<~
とを使うといい。
def foo
puts <<~STR
foo
bar
baz
STR
end
もしくはActiveSupportのString#strip_heredoc
でも同様のことができるが、素直にRuby2.3以降にバージョンアップして<<~
のが良い。
if options[:usage]
puts <<-USAGE.strip_heredoc
This command does such and such.
Supported options are:
-h This message
...
USAGE
end
String#squish
長い1行の記述を書くときにはString#squish
が便利。ヒアドキュメント中は80行や120行などで改行いれて書くけど結果は1行になる。
def lock!(lock = true)
if persisted?
if changed?
ActiveSupport::Deprecation.warn(<<-MSG.squish)
Locking a record with unpersisted changes is deprecated and will raise an
exception in Rails 5.2. Use `save` to persist the changes, or `reload` to
discard them explicitly.
MSG
end
reload(lock: lock)
end
self
end
ヒアドキュメントの戻り値は以下のとおり1行になる(冒頭と末尾のホワイトスペース、連続したホワイトスペースは1つのスペースに変換される)
=> "Locking a record with unpersisted changes is deprecated and will raise an exception in Rails 5.2. Use `save` to persist the changes, or `reload` to discard them explicitly."