lib/eighty_legs/eighty_format.rb in 80legs-0.1.0 vs lib/eighty_legs/eighty_format.rb in 80legs-0.2.0
- old
+ new
@@ -1,26 +1,38 @@
module EightyLegs
class EightyFormat
def initialize(filename_or_io)
- @io = if filename_or_io.is_a?(String)
- File.open(filename_or_io)
+ if filename_or_io.is_a?(String)
+ initialize_with_filename(filename_or_io)
elsif filename_or_io.is_a?(IO)
- filename_or_io
+ initialize_with_io(filename_or_io)
else
raise TypeError.new(filename_or_io.class)
end
check_for_classid_and_version()
end
+ def initialize_with_filename(filename)
+ initialize_with_io(File.open(filename))
+ end
+
+ def initialize_with_io(io)
+ @io = Zlib::GzipReader.new(io)
+ rescue Zlib::GzipFile::Error
+ @io = io
+ @io.rewind
+ end
+
def each(&blk)
while not @io.eof?
url_size = @io.read(4).unpack("i").first
url = @io.read(url_size)
data_size = @io.read(4).unpack("i").first
data = @io.read(data_size)
blk.call(Entry.new(url, data))
end
- @io.seek(8, IO::SEEK_SET)
+ @io.rewind
+ @io.read(8)
end
private
def check_for_classid_and_version
@io.rewind