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