Summarizing heredoc in Ruby and Rails

Updated . Posted . Visible to the public. Repeats.

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:

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"
Last edit
Michael Leimstädtner
Keywords
summary
License
Source code in this card is licensed under the MIT License.
Posted by Emanuel to makandra dev (2016-12-08 10:23)