Ruby provides an automatic constant called DATA, which is an IO object that references all text in the current file under an __END__ token.

I find it convenient to use the __END__ area to store all sorts of stuff, rather than have to worry about distributing separate files.

The problem

The DATA constant is determined from whatever ruby believes $0 to be. It doesn't work inside of other required libraries, so you'll see stuff like this all the time:

END = __FILE__ ).read.split( /^__END__/, 2 ).last

It works, but it's more work than I want to do.

A workaround

Chunker solves this by parsing __END__ tokens for you, and making it available in the form of a 'DATA_END' constant. It installs this constant into the class that includes Chunker, so you can use it again and again, assuming you use a different file for each class.

It also automatically parses out other things that look like tokens, so you can easily have multiple, distinct documents all embedded into the __END__ block.


There is no direct interface to Chunker. Just include it from a class to have that file's __END__ data blocks magically become DATA_* IO constants within that class.


This produces the string "Yep.\n".

require 'chunker'
class Foom
    include Chunker

puts :DATA_WICKED ).read

Stuff in the END block!
Ultimate success!


Get the latest gem here. Or a tarball.


You can also check out the source via Mercurial from the following uri:

% hg clone
Last modified 6 years ago Last modified on Jul 24, 2009, 8:11:30 AM