Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Write heredocs without worry of wonky indentation
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
spec
.gitignore
Gemfile
Gemfile.lock
LICENSE
README.md
unindentable.gemspec

README.md

Unindentable

With Unindentable, you can write heredocs without worry of wonky indentation.

Motivation

Heredocs are convenient. But the indentation can bite you. For example:

def hello
  html = <<-BLOCK
    <html>
      <body>
        <p>Hello</p>
      </body>
    </html>
  BLOCK
end

The problem is that you get extra indentation you probably don't want:

irb> hello
=> "    <html>\n      <body>\n        <p>Hello</p>\n      </body>\n    </html>\n"

One solution is to move your heredoc to the left margin:

def hello
  html = <<-BLOCK
<html>
  <body>
    <p>Hello</p>
  </body>
</html>
  BLOCK
end

So that you get the result you expect:

> hello
=> "<html>\n  <body>\n    <p>Hello</p>\n  </body>\n</html>\n"

But this doesn't look good in your source. With Unindentable, you can write:

def hello
  html = <<-BLOCK.unindent
    <html>
      <body>
        <p>Hello</p>
      </body>
    </html>
  BLOCK
end

And get the nice unindented result you want:

> hello
=> "<html>\n  <body>\n    <p>Hello</p>\n  </body>\n</html>\n"

That's it.

The Backstory

Here are some examples from the Interwebs where people discuss potential solutions:

Alternatives

Something went wrong with that request. Please try again.