Module: Capistrano::DataPlaneApi::TerminalPrintLoop

Defined in:
lib/capistrano/data_plane_api/terminal_print_loop.rb

Class Method Summary collapse

Class Method Details

.call(interval: 2) {|content| ... } ⇒ Object

Calls the passed block in an endless loop with a given interval between calls. It prints the ‘String` returned from the block and clears it before another frame is printed.

Parameters:

  • interval (Integer) (defaults to: 2)

    Number of seconds between each screen refresh

Yield Parameters:

  • content (String)


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/capistrano/data_plane_api/terminal_print_loop.rb', line 16

def call(interval: 2)
  previous_line_count = 0
  previous_max_line_length = 0
  loop do
    content = ::String.new
    yielded = yield(content)

    print ::TTY::Cursor.clear_lines(previous_line_count + 1)

    content = yielded if yielded.is_a?(::String) && content.length.zero?
    line_count = 0
    max_line_length = 0
    content.each_line do |line|
      line_count += 1
      max_line_length = line.length if line.length > max_line_length
    end
    previous_line_count = line_count
    previous_max_line_length = max_line_length

    puts(content)
    sleep(interval)
  end
end