Breaking up long strings on multiple lines in Ruby without stripping newlines
ruby, ruby-on-rails
Solution
Three years later, there is now a solution in Ruby 2.3: The squiggly heredoc.
class Subscription
def warning_message
<<~HEREDOC
Subscription expiring soon!
Your free trial will expire in #{days_until_expiration} days.
Please update your billing information.
HEREDOC
end
end
Blog post link: https://infinum.co/the-capsized-eight/articles/multiline-strings-ruby-2-3-0-the-squiggly-heredoc
The indentation of the least-indented line will be removed from each line of the content.
Problem
We recently decided at my job to a ruby style guide. One of the edicts is that no line should be wider than 80 characters. Since this is a Rails project, we often have strings that are a little bit longer - i.e. "User X wanted to send you a message about Thing Y" that doesn't always fit within the 80 character style limit. I understand there are three ways to have a long string span multiple lines: - HEREDOC - %Q{} - Actual string concatenation. However, all of these cases end up taking more computation cycles, which seems silly. String concatenation obviously, but for `HEREDOC` and `%Q` I have to strip out the newlines, via something like `.gsub(/\n$/, '')`. Is there a pure syntax way to do this, that is equivalent to just having the whole string on one line? The goal being, obviously, to not spend any extra cycles just because I want my code to be slightly more readable. (Yes, I realize that you have to make that tradeoff a lot...but for string length, this just seems silly.) Update: Backslashes aren't exactly what I want because you lose indentation, which really affects style/readability. Example: ``` if foo string = "this is a \ string that spans lines" end ``` I find the above a bit hard to read. EDIT: I added an answer below; three years later we now have the squiggly heredoc.