close Warning: Can't synchronize with repository "(default)" (Unsupported version control system "hg": Can't find an appropriate component, maybe the corresponding plugin was not enabled? ). Look in the Trac log for more information.



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