class ProgressMonitor::Display::MessageLoop

Attributes

queue[RW]

Public Class Methods

new(queue, main_thread, renderer) click to toggle source
# File lib/progress_monitor/display/message_loop.rb, line 6
def initialize(queue, main_thread, renderer)
  @queue = queue
  @main_thread = main_thread
  @renderer = renderer
end

Public Instance Methods

perform() click to toggle source
# File lib/progress_monitor/display/message_loop.rb, line 12
def perform
  loop do
    message = queue.pop
    case message[:type]
      when :update
        on_update(message[:task], message[:event], message[:details])
      when :timer
        on_timer
      when :input
        on_input message[:key]
    end
  end
rescue => error
  main_thread.raise error
end

Private Instance Methods

on_input(key) click to toggle source
# File lib/progress_monitor/display/message_loop.rb, line 38
def on_input(key)
  case key
    when ?\C-c
      main_thread.raise Interrupt
    when "\e[A"
      collapse
    when "\e[B"
      expand
    else
      puts key.inspect
  end
end
on_timer() click to toggle source
# File lib/progress_monitor/display/message_loop.rb, line 51
def on_timer
  @renderer.refresh
end
on_update(task, event, details) click to toggle source
# File lib/progress_monitor/display/message_loop.rb, line 30
def on_update(task, event, details)
  case event
    when :status
      renderer.task = task
      renderer.refresh
  end
end