Sha256: beca72956a3a1eef2b98606853c687fdfc0c8ebff79078ca50a9914a36e64fe7
Contents?: true
Size: 1.77 KB
Versions: 13
Compression:
Stored size: 1.77 KB
Contents
# Used for IO objects that need to report the current offset at each operation that changes the said offset # (useful for building progress bars that report on a file read operation). Pass the actual IO and a block to # report progress to the constructor. class Tracksperanto::ProgressiveIO < DelegateClass(IO) include Tracksperanto::Returning # Get or set the total size of the contained IO. If the passed IO is a File object # the size will be preset automatically attr_accessor :total_size attr_accessor :progress_block def initialize(with_file, &blk) __setobj__(with_file) @total_size = with_file.stat.size if with_file.respond_to?(:stat) @progress_block = blk.to_proc if blk end # Report offset at each line def each(sep_string = $/, &blk) # Report offset at each call of the iterator result = super(sep_string) do | line | yield(line) notify_read end end alias_method :each_line, :each def each_byte(&blk) # Report offset at each call of the iterator super { |b| yield(b); notify_read } end def getc returning(super) { notify_read } end def gets returning(super) { notify_read } end def read(*a) returning(super) { notify_read } end def readbytes(*a) returning(super) { notify_read } end def readchar returning(super) { notify_read } end def readline(*a) returning(super) { notify_read } end def readlines(*a) returning(super) { notify_read } end def seek(*a) returning(super) { notify_read } end def ungetc(*a) returning(super) { notify_read } end def pos=(p) returning(super) { notify_read } end private def notify_read @progress_block.call(pos, @total_size) if @progress_block end end
Version data entries
13 entries across 13 versions & 1 rubygems