Posted about 2 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+

Copy
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:

Copy
def foo bar = <<TEXT line1 line2 line3 TEXT puts bar.inspect end foo => "line1\nline2\nline3\n"
Copy
def foo bar = <<TEXT line1 line2 line3 TEXT puts bar.inspect end foo => " line1\n line2\n line3\n"
Copy
def foo bar = <<TEXT line1 line2 line3 TEXT puts bar.inspect end # not valid as alignment of heredoc is wrong
Copy
def foo bar = <<-TEXT line1 line2 line3 TEXT puts bar.inspect end foo => " line1\n line2\n line3\n"

Read more:

Rails 3+

Copy
def foo bar = <<-TEXT.strip_heredoc line1 line2 line3 TEXT puts bar.inspect end foo => "line1\nline2\nline3\n"

Read more:

Copy
def foo bar = <<-TEXT.squish line1 line2 line3 TEXT puts bar.inspect end foo => "line1 line2 line3"

Rails + Ruby 2.3+

Copy
def foo bar = <<~TEXT.strip line1 line2 line3 TEXT puts bar.inspect end foo => "line1\nline2\nline3"
Growing Rails Applications in Practice
Check out our new e-book:
Learn to structure large Ruby on Rails codebases with the tools you already know and love.

Owner of this card:

Avatar
Emanuel De
Last edit:
26 days ago
by Henning Koch
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Emanuel De to makandra dev
This website uses cookies to improve usability and analyze traffic.
Accept or learn more