diff -r 9e127bf6e84f -r e5c705047540 chunker/README --- a/chunker/README Sat Nov 08 18:59:05 2008 +0000 +++ b/chunker/README Sun Nov 09 00:27:36 2008 +0000 @@ -1,7 +1,59 @@ -The DATA constant +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. -The problem + 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". -A workaround + + 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. +