= 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: {{{ #!ruby 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". {{{ #!ruby 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 [/chrome/site/chunker.gem here]. Or a [http://code.martini.nu/ruby-modules/archive/tip.tar.gz tarball]. == Development == You can also check out the source via [http://mercurial.selenic.com/wiki/ Mercurial] from the following uri: {{{ % hg clone http://code.martini.nu/ruby-modules/ }}}