Strip Whitespace from Heredocs in Ruby/Rails
UPDATE!
Simple way - it's use:
class Template def self.base <<~TEXT Lorem Ipsum is simply dummy Lorem Ipsum is simply dummy TEXT end end > Template.base => "Lorem Ipsum is simply dummy\nLorem Ipsum is simply dummy\n"
I forgot about <<~, and that's why I got this TIL bike.
You use heredoc in Ruby/Rails app?
Then you're familiar with the problem..
class Template def self.base <<-TEXT Lorem Ipsum is simply dummy Lorem Ipsum is simply dummy Lorem Ipsum is simply dummy TEXT end end > Template.base => " Lorem Ipsum is simply dummy\n Lorem Ipsum is simply dummy\n Lorem Ipsum is simply dummy\n"
hmm...
I don't want to have so many gaps in the text.
Maybe use them:
class Template def self.base <<-TEXT Lorem Ipsum is simply dummy Lorem Ipsum is simply dummy TEXT end end > Template.base => "Lorem Ipsum is simply dummy\nLorem Ipsum is simply dummy\n"
It's good, but the code looks like 💩.
This problem can be solved by using activesupport #strip_heredoc:
class Template def self.base <<-TEXT.strip_heredoc Lorem Ipsum is simply dummy Lorem Ipsum is simply dummy TEXT end end > Template.base => "Lorem Ipsum is simply dummy\nLorem Ipsum is simply dummy\n"
If you don't have active_support, use refine String with #strip_heredoc which will give similar result:
module Utils refine String do def strip_heredoc gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, "".freeze) end end end class Template using Utils def self.base <<-TEXT.strip_heredoc Lorem Ipsum is simply dummy Lorem Ipsum is simply dummy TEXT end end > Template.base => "Lorem Ipsum is simply dummy\nLorem Ipsum is simply dummy\n"