class Screen

Public Class Methods

new() click to toggle source
# File lib/log_query/screen.rb, line 2
def initialize
  @old_lines = []
  @new_lines = []
  @current_line = 0
end

Public Instance Methods

delete_current_line() click to toggle source
# File lib/log_query/screen.rb, line 26
def delete_current_line
  @buffer += "\e[2K"
end
draw() click to toggle source
# File lib/log_query/screen.rb, line 35
def draw
  @buffer = ""
  # pad line buffers
  line_count = [@old_lines.size, @new_lines.size].max
  @old_lines.fill(nil, @old_lines.size, line_count) if @old_lines.size < line_count
  @new_lines.fill(nil, @new_lines.size, line_count) if @new_lines.size < line_count

  @old_lines.zip(@new_lines).each_with_index do |(old, new), index|
    if old != new
      move_to(index)
      delete_current_line
      print_line(new) 
    end
  end
  @old_lines = @new_lines
  @new_lines = []
  print @buffer
end
line(value) click to toggle source
# File lib/log_query/screen.rb, line 8
def line(value)
  @new_lines << value
end
move_to(row) click to toggle source
# File lib/log_query/screen.rb, line 12
def move_to(row)
  #puts "moving to #{row}"
  #puts "current line #{@current_line}"
  diff = row - @current_line
  if diff > 0
    #puts "moving down #{diff.abs}"
    @buffer += "\e[#{diff.abs}B"
  elsif diff < 0
    #puts "moving up #{diff.abs}"
    @buffer += "\e[#{diff.abs}A"
  end
  @current_line += diff
end
print_line(line) click to toggle source