--- a/chunker/lib/chunker.rb Thu Jun 04 17:28:02 2009 +0000
+++ b/chunker/lib/chunker.rb Fri Jan 21 19:41:16 2011 -0800
@@ -1,4 +1,8 @@
-#!/usr/bin/ruby
+# vim: set nosta noet ts=4 sw=4:
+
+require 'strscan'
+require 'stringio'
+
#
# Chunker: A convenience library for parsing __END__ tokens consistently.
#
@@ -17,20 +21,14 @@
###
module Chunker
- require 'strscan'
- require 'stringio'
+ # VCS Revision
+ VCSRev = %q$Rev$
- # SVN Revision
- #
- SVNRev = %q$Rev$
-
- # SVN Id
- #
- SVNId = %q$Id$
+ # VCS Id
+ VCSId = %q$Id$
# Package version
- #
- VERSION = '0.1'
+ VERSION = '1.0.0'
### Parser class for __END__ data blocks.
@@ -40,11 +38,9 @@
class DataParser
# The mark for a DATA block.
- #
END_TOKEN = /^__END__\r?\n/
# The mark for a 'sub' block.
- #
CHUNK_TOKEN = /^__([A-Z\_0-9]+)__\r?\n/
@@ -59,11 +55,14 @@
@scanner = StringScanner.new( end_string )
io.close
+ # put each chunk into its own constant
+ #
if @scanner.check_until( CHUNK_TOKEN )
- # put each chunk into its own constant
self.extract_blocks
+
+ # no sub blocks, put the whole mess into DATA_END
+ #
else
- # no sub blocks, put the whole mess into DATA_END
@klass.const_set( :DATA_END, StringIO.new( end_string ) )
end
end
@@ -93,20 +92,20 @@
else
label = @scanner[1]
+ # Pull the next token text out of the data, set up the next pass
+ #
if data = @scanner.scan_until( CHUNK_TOKEN )
- # Pull the next token text out of the data, set up the next pass
- #
- data = data[ 0, data.length - @scanner[0].length ]
+ data = data[ 0, data.length - @scanner[0].length ]
@scanner.pos = self.next_position
+
+ # No additional blocks
+ #
else
- # No additional blocks
- #
data = @scanner.rest
end
end
# Add the IO constant to the class that included me.
- #
@klass.const_set( "DATA_#{label}".to_sym, StringIO.new( data ) )
end
end
@@ -126,7 +125,6 @@
def self.included( klass )
# klass.instance_eval{ __FILE__ } awww, nope.
# __FILE__ won't work here, so we find the filename via caller().
- #
io = File.open( caller(1).last.sub(/:.*?$/, ''), 'r' )
DataParser.new( klass, io )