class Arcanus::UI
Manages all interaction with the user.
Public Class Methods
Creates a {UI} that mediates between the given input/output streams.
@param input [Arcanus::Input] @param output [Arcanus::Output]
# File lib/arcanus/ui.rb, line 18 def initialize(input, output) @input = input @output = output @pastel = Pastel.new(enabled: output.tty?) @prompt = TTY::Prompt.new end
Public Instance Methods
Print output in bold face.
@param args [Array] @param kwargs [Hash]
# File lib/arcanus/ui.rb, line 62 def bold(*args, **kwargs) print(@pastel.bold(*args), **kwargs) end
Print the specified output in a bold face and color indicative of error.
@param args [Array] @param kwargs [Hash]
# File lib/arcanus/ui.rb, line 78 def bold_error(*args, **kwargs) print(@pastel.bold.red(*args), **kwargs) end
Print the specified output in a color indicative of error.
@param args [Array] @param kwargs [Hash]
# File lib/arcanus/ui.rb, line 70 def error(args, **kwargs) print(@pastel.red(*args), **kwargs) end
Print the specified output in a color indicating information.
@param args [Array] @param kwargs [Hash]
# File lib/arcanus/ui.rb, line 102 def info(*args, **kwargs) print(@pastel.cyan(*args), **kwargs) end
Print a blank line.
# File lib/arcanus/ui.rb, line 107 def newline print('') end
Print the specified output.
@param output [String] @param newline [Boolean] whether to append a newline
# File lib/arcanus/ui.rb, line 53 def print(output, newline: true) @output.print(output) @output.print("\n") if newline end
Get user input without echoing (useful for passwords).
Does not strip extraneous whitespace (since it could be part of password).
@return [String, nil]
# File lib/arcanus/ui.rb, line 41 def secret_user_input if input = @input.get(noecho: true) input.chomp # Remove trailing newline as it is not part of password end rescue Interrupt exit 130 # User cancelled end
Execute a command with a spinner animation until it completes.
# File lib/arcanus/ui.rb, line 112 def spinner(*args) spinner = TTY::Spinner.new(*args) spinner_thread = Thread.new do loop do sleep 0.1 spinner.spin end end yield ensure spinner_thread.kill newline # Ensure next line of ouptut on separate line from spinner end
Print the specified output in a color indicative of success.
@param args [Array] @param kwargs [Hash]
# File lib/arcanus/ui.rb, line 86 def success(*args, **kwargs) print(@pastel.green(*args), **kwargs) end
Prints a table.
Customize the table by passing a block and operating on the table object passed to that block to add rows and customize its appearance.
# File lib/arcanus/ui.rb, line 131 def table(options = {}) t = TTY::Table.new(options) yield t print(t.render(:unicode, options)) end
Get user input, stripping extraneous whitespace.
@return [String, nil]
# File lib/arcanus/ui.rb, line 28 def user_input if input = @input.get input.strip end rescue Interrupt exit 130 # User cancelled end
Print the specified output in a color indicative of a warning.
@param args [Array] @param kwargs [Hash]
# File lib/arcanus/ui.rb, line 94 def warning(*args, **kwargs) print(@pastel.yellow(*args), **kwargs) end