Method: ChefApply::UI::Terminal.render_parallel_jobs

Defined in:
lib/chef_apply/ui/terminal.rb

.render_parallel_jobs(header, jobs) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/chef_apply/ui/terminal.rb', line 45

def render_parallel_jobs(header, jobs)
  # Do not indent the topmost 'parent' spinner, but do indent child spinners
  indent_style = { top: "",
                   middle: TTY::Spinner::Multi::DEFAULT_INSET[:middle],
                   bottom: TTY::Spinner::Multi::DEFAULT_INSET[:bottom] }
  # @option options [Hash] :style
  #   keys :top :middle and :bottom can contain Strings that are used to
  #   indent the spinners. Ignored if message is blank
  multispinner = get_multispinner.new("[:spinner] #{header}",
    output: @location,
    hide_cursor: true,
    style: indent_style)
  jobs.each do |job|
    multispinner.register(spinner_prefix(job.prefix), hide_cursor: true) do |spinner|
      reporter = StatusReporter.new(spinner, prefix: job.prefix, key: :status)
      job.run(reporter)
    end
  end
  multispinner.auto_spin
ensure
  # Spinners hide the cursor for better appearance, so we need to make sure
  # we always bring it back
  show_cursor
end