# File lib/ole/ranges_io.rb, line 158 def read limit=nil data = '' return data if eof? limit ||= size pos, len = @ranges[@active] diff = @pos - @offsets[@active] pos += diff len -= diff loop do @io.seek pos if limit < len s = @io.read(limit).to_s @pos += s.length data << s break end s = @io.read(len).to_s @pos += s.length data << s break if s.length != len limit -= len break if @active == @ranges.length - 1 @active += 1 pos, len = @ranges[@active] end data end