class ProgressMonitor::Display::Renderer

Attributes

task[RW]

Public Class Methods

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

Public Instance Methods

refresh() click to toggle source
# File lib/progress_monitor/display/renderer.rb, line 11
def refresh
  new_state = task_state

  if @current_state != new_state
    render task_state
    @current_state = new_state
  end

rescue => e
  puts "\r\n", e.inspect, e.backtrace
  nil
end

Private Instance Methods

clear_code() click to toggle source
# File lib/progress_monitor/display/renderer.rb, line 43
def clear_code
  "\e[1K\r"
end
columns() click to toggle source
# File lib/progress_monitor/display/renderer.rb, line 47
def columns
  STDIN.winsize[1]
end
render(state) click to toggle source
# File lib/progress_monitor/display/renderer.rb, line 33
def render(state)
  left                            = state[:name]
  progress_bar                    = ProgressBar.new(size: 20)
  progress_bar.completion_percent = state[:completion_percent]
  right                           = progress_bar.render
  spacing                         = " " * (columns - left.length - right.length)

  print clear_code, left, spacing, "\e[48;5;235m\e[32m", right, "\e[0m\r\e[#{left.length}C"
end
task_state() click to toggle source
# File lib/progress_monitor/display/renderer.rb, line 26
def task_state
  {
    name:               task.name,
    completion_percent: task.completion_percent,
  }
end