Class: ChefApply::UI::Terminal
- Inherits:
-
Object
- Object
- ChefApply::UI::Terminal
- Defined in:
- lib/chef_apply/ui/terminal.rb,
lib/chef_apply/ui/terminal/job.rb
Defined Under Namespace
Classes: Job
Class Attribute Summary collapse
-
.location ⇒ Object
To support matching in test.
Class Method Summary collapse
- .get_multispinner ⇒ Object
- .get_spinner ⇒ Object
- .init(location) ⇒ Object
- .output(msg) ⇒ Object
- .render_job(initial_msg, job) ⇒ Object
- .render_parallel_jobs(header, jobs) ⇒ Object
- .show_cursor ⇒ Object
- .spinner_prefix(prefix) ⇒ Object
- .write(msg) ⇒ Object
Class Attribute Details
.location ⇒ Object
To support matching in test
30 31 32 |
# File 'lib/chef_apply/ui/terminal.rb', line 30 def location @location end |
Class Method Details
.get_multispinner ⇒ Object
84 85 86 |
# File 'lib/chef_apply/ui/terminal.rb', line 84 def get_multispinner ChefApply::Config.dev.spinner ? TTY::Spinner::Multi : PlainTextHeader end |
.get_spinner ⇒ Object
88 89 90 |
# File 'lib/chef_apply/ui/terminal.rb', line 88 def get_spinner ChefApply::Config.dev.spinner ? TTY::Spinner : PlainTextElement end |
.init(location) ⇒ Object
32 33 34 |
# File 'lib/chef_apply/ui/terminal.rb', line 32 def init(location) @location = location end |
.output(msg) ⇒ Object
40 41 42 |
# File 'lib/chef_apply/ui/terminal.rb', line 40 def output(msg) @location.puts msg end |
.render_job(initial_msg, job) ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'lib/chef_apply/ui/terminal.rb', line 69 def render_job(initial_msg, job) # TODO why do we have to pass prefix to both the spinner and the reporter? spinner = get_spinner.new(spinner_prefix(job.prefix), output: @location, hide_cursor: true) reporter = StatusReporter.new(spinner, prefix: job.prefix, key: :status) reporter.update(initial_msg) spinner.auto_spin job.run(reporter) end |
.render_parallel_jobs(header, jobs) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/chef_apply/ui/terminal.rb', line 44 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 |
.show_cursor ⇒ Object
92 93 94 |
# File 'lib/chef_apply/ui/terminal.rb', line 92 def show_cursor TTY::Cursor.show end |
.spinner_prefix(prefix) ⇒ Object
78 79 80 81 82 |
# File 'lib/chef_apply/ui/terminal.rb', line 78 def spinner_prefix(prefix) spinner_msg = "[:spinner] " spinner_msg += ":prefix " unless prefix.empty? spinner_msg + ":status" end |
.write(msg) ⇒ Object
36 37 38 |
# File 'lib/chef_apply/ui/terminal.rb', line 36 def write(msg) @location.write(msg) end |