# File lib/ole/ranges_io.rb, line 54 def initialize io, mode='r', params={} mode, params = 'r', mode if Hash === mode ranges = params[:ranges] @params = {:close_parent => false}.merge params @mode = IO::Mode.new mode @io = io # convert ranges to arrays. check for negative ranges? ranges ||= [0, io.size] @ranges = ranges.map { |r| Range === r ? [r.begin, r.end - r.begin] : r } # calculate size @size = @ranges.inject(0) { |total, (pos, len)| total + len } # initial position in the file @pos = 0 # handle some mode flags truncate 0 if @mode.truncate? seek size if @mode.append? end