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" 
Do you have a project for us?Get a free quote