wiki:Chunker
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.

Chunker

Preface

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.open( __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.

Usage

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.

Example

This produces the string "Yep.\n".

require 'chunker'
class Foom
    include Chunker
end

puts Foom.new.class.const_get( :DATA_WICKED ).read

__END__
Stuff in the END block!
__WOW__
Ultimate success!
__WICKED__
Yep.

Downloads

Get the latest gem here. Or a tarball.

Development

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

% hg clone http://code.martini.nu/ruby-modules/
Last modified 6 years ago Last modified on Jul 24, 2009, 8:11:30 AM