lib/mobi/stream_slicer.rb in mobi-0.1.2 vs lib/mobi/stream_slicer.rb in mobi-0.2.0

- old
+ new

@@ -1,67 +1,44 @@ module Mobi class StreamSlicer - attr_reader :stream, :length + attr_reader :stream, :length attr_accessor :start, :stop - def initialize(stream, start=0, stop=nil) + def initialize(stream, start = 0, stop = nil) @stream = stream @start = start + if stop.nil? stream.seek(0, 2) stop = stream.tell end - @stop = stop + + @stop = stop @length = stop - start end def [](offset, bytes=1) stream = @stream - base = @start - + base = @start + if bytes == 1 stream.seek(base + offset) return stream.read(1) end - + start = offset stop = offset + bytes - + # Reverse if you want to pass in negative bytes start, stop = stop, start if bytes < 0 - + + # I can't find a use case where it will ever get here size = stop - start - return "" if size <= 0 - + return nil if size <= 0 + stream.seek(base + start) data = stream.read(size) return data end - - - # def [](key) - # stream = self.stream - # base = self.start - # if key.is_a? Integer - # stream.seek(base + key) - # return stream.read(1) - # end - # if key.is_a? Range - # start = key.first - # stop = key.last - # - # if key.max.nil? - # start, stop = stop, start - # end - # size = stop - start - # - # return "" if size <= 0 - # - # stream.seek(base + start) - # data = stream.read(size) - # return data - # end - # end - end -end \ No newline at end of file +end