2008-11-08 18:59:05 +00:00
|
|
|
|
2008-11-09 00:27:36 +00:00
|
|
|
Preface:
|
2008-11-08 18:59:05 +00:00
|
|
|
|
2008-11-09 00:27:36 +00:00
|
|
|
Ruby provides an automatic constant called DATA, which is an IO object
|
|
|
|
|
that references all text in the current file under an __END__ token.
|
2008-11-08 18:59:05 +00:00
|
|
|
|
2008-11-09 00:27:36 +00:00
|
|
|
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.
|
2008-11-08 18:59:05 +00:00
|
|
|
|