class LogfileInterval::Util::FileBackward

Based on Perl's File::ReadBackwards module, by Uri Guttman.

Constants

MAX_READ_SIZE

Public Class Methods

new( *args ) click to toggle source
# File lib/logfile_interval/util/file_backward.rb, line 7
def initialize( *args )
  return unless File.exist?(args[0])
  @file = File.new(*args)
  @file.seek(0, IO::SEEK_END)

  @current_pos = @file.pos

  @read_size = @file.pos % MAX_READ_SIZE
  @read_size = MAX_READ_SIZE if @read_size.zero?

  @line_buffer = Array.new
end

Public Instance Methods

close() click to toggle source
# File lib/logfile_interval/util/file_backward.rb, line 37
def close
  return unless @file
  @file.close()
end
gets( sep_string = $/ ) click to toggle source
# File lib/logfile_interval/util/file_backward.rb, line 20
def gets( sep_string = $/ )
  return nil unless @file
  return @line_buffer.pop if @line_buffer.size > 2 or @current_pos.zero?

  @current_pos -= @read_size
  @file.seek(@current_pos, IO::SEEK_SET)

  @line_buffer[0] = "#{@file.read(@read_size)}#{@line_buffer[0]}"
  @read_size = MAX_READ_SIZE # Set a size for the next read.

  @line_buffer[0] =
  @line_buffer[0].scan(/.*?#{Regexp.escape(sep_string)}|.+/)
  @line_buffer.flatten!

  gets(sep_string)
end