class CliSpinnable::Writer
Constants
- REFRESH_DELAY_IN_SECONDS
Attributes
line[R]
output[R]
queue[R]
session[R]
Public Class Methods
new(output, line)
click to toggle source
# File lib/cli_spinnable/writer.rb, line 7 def initialize(output, line) @output = output @line = line @queue = Queue.new @session = start_session end
Public Instance Methods
failure()
click to toggle source
# File lib/cli_spinnable/writer.rb, line 27 def failure push(:sign=, :fail) push(:newline=, true) push(:str=, '') self end
finalize()
click to toggle source
# File lib/cli_spinnable/writer.rb, line 34 def finalize push(:sign=, :blank) finalize_session self end
print(str)
click to toggle source
# File lib/cli_spinnable/writer.rb, line 14 def print(str) push(:sign=, :spin) push(:<<, str) self end
tick()
click to toggle source
# File lib/cli_spinnable/writer.rb, line 20 def tick push(:sign=, :tick) push(:newline=, true) push(:str=, '') self end
Private Instance Methods
finalize_session()
click to toggle source
# File lib/cli_spinnable/writer.rb, line 67 def finalize_session session[:finalize] = true session.join end
push(attr, val)
click to toggle source
# File lib/cli_spinnable/writer.rb, line 44 def push(attr, val) raise Error, 'Session finalized' unless session.status queue.push([attr, val]) end
reload_line()
click to toggle source
# File lib/cli_spinnable/writer.rb, line 62 def reload_line line.public_send(*queue.pop) unless queue.empty? line end
start_session()
click to toggle source
# File lib/cli_spinnable/writer.rb, line 49 def start_session Thread.new do loop do loop do output.write reload_line.to_s_resetting_newline break if queue.empty? end break if Thread.current[:finalize] sleep REFRESH_DELAY_IN_SECONDS end end end