This card tries to summarize by example the different uses of heredoc.
- In Ruby
<<
vs.<<-
vs.<<~
- In Rails
strip_heredoc
vs.squish
strip_heredoc
should be used for a text, where you want to preserve newlines. (multi-line -> multi-line)
squish
should be used for a text, where you want to squish newlines. (multi-line -> one-line)
Ruby 2.3+
def foo
bar = <<~TEXT
line1
line2
line3
TEXT
puts bar.inspect
end
foo => "line1\nline2\nline3\n"
Read more: Unindent HEREDOCs in Ruby 2.3
Forms that work in older Rubies
Older forms don't automatically unindent lines:
def foo
bar = <<TEXT
line1
line2
line3
TEXT
puts bar.inspect
end
foo => "line1\nline2\nline3\n"
def foo
bar = <<TEXT
line1
line2
line3
TEXT
puts bar.inspect
end
foo => " line1\n line2\n line3\n"
def foo
bar = <<TEXT
line1
line2
line3
TEXT
puts bar.inspect
end
# not valid as alignment of heredoc is wrong
def foo
bar = <<-TEXT
line1
line2
line3
TEXT
puts bar.inspect
end
foo => " line1\n line2\n line3\n"
Read more:
Rails 3+
def foo
bar = <<-TEXT.strip_heredoc
line1
line2
line3
TEXT
puts bar.inspect
end
foo => "line1\nline2\nline3\n"
Read more:
- Rails 3+: strip_heredoc (String) - APIdock
- How to remove leading spaces from indented strings (deprecated)
def foo
bar = <<-TEXT.squish
line1
line2
line3
TEXT
puts bar.inspect
end
foo => "line1 line2 line3"
Rails + Ruby 2.3+
def foo
bar = <<~TEXT.strip
line1
line2
line3
TEXT
puts bar.inspect
end
foo => "line1\nline2\nline3"
Posted by Emanuel to makandra dev (2016-12-08 10:23)