Posted over 5 years ago. Visible to the public. Repeats.
Summarizing heredoc in Ruby and Rails
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+
Copydef 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:
Copydef foo bar = <<TEXT line1 line2 line3 TEXT puts bar.inspect end foo => "line1\nline2\nline3\n"
Copydef foo bar = <<TEXT line1 line2 line3 TEXT puts bar.inspect end foo => " line1\n line2\n line3\n"
Copydef foo bar = <<TEXT line1 line2 line3 TEXT puts bar.inspect end # not valid as alignment of heredoc is wrong
Copydef foo bar = <<-TEXT line1 line2 line3 TEXT puts bar.inspect end foo => " line1\n line2\n line3\n"
Read more:
Rails 3+
Copydef 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)
Copydef foo bar = <<-TEXT.squish line1 line2 line3 TEXT puts bar.inspect end foo => "line1 line2 line3"
Rails + Ruby 2.3+
Copydef foo bar = <<~TEXT.strip line1 line2 line3 TEXT puts bar.inspect end foo => "line1\nline2\nline3"
makandra has been working exclusively with Ruby on Rails since 2007. Our laser focus on a single technology has made us a leader in this space.