Class: Omaship::ProgressRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/omaship/progress_renderer.rb

Constant Summary collapse

SPINNER_FRAMES =
[
  "[=   ]",
  "[ =  ]",
  "[  = ]",
  "[   =]",
  "[  = ]",
  "[ =  ]"
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(out:) ⇒ ProgressRenderer

Returns a new instance of ProgressRenderer.



12
13
14
15
16
17
18
19
20
# File 'lib/omaship/progress_renderer.rb', line 12

def initialize(out:)
  @out = out
  @seen = {}
  @activity_mutex = Mutex.new
  @activity_message = nil
  @activity_eta = nil
  @current_frame = SPINNER_FRAMES.first
  @cursor_hidden = false
end

Instance Method Details

#finish_activity(message = nil) ⇒ Object



61
62
63
64
# File 'lib/omaship/progress_renderer.rb', line 61

def finish_activity(message = nil)
  stop_spinner
  step(message) if message
end

#start_activity(message, eta: nil) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/omaship/progress_renderer.rb', line 29

def start_activity(message, eta: nil)
  @activity_mutex.synchronize do
    @activity_message = message
    @activity_eta = eta
  end

  if interactive_output?
    hide_cursor
    render_activity_frame(@current_frame)
    start_spinner
  else
    step(activity_line(message:, eta:))
  end
end

#step(message) ⇒ Object



22
23
24
25
26
27
# File 'lib/omaship/progress_renderer.rb', line 22

def step(message)
  return if @seen[message]

  @seen[message] = true
  @out.puts message
end

#update_activity(message: nil, eta: nil) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/omaship/progress_renderer.rb', line 44

def update_activity(message: nil, eta: nil)
  @activity_mutex.synchronize do
    @activity_message = message if message
    @activity_eta = eta if eta
  end

  if interactive_output?
    render_activity_frame(@current_frame)
  else
    line = nil
    @activity_mutex.synchronize do
      line = activity_line(message: @activity_message, eta: @activity_eta)
    end
    step(line)
  end
end