class Arcanus::UI

Manages all interaction with the user.

Public Class Methods

new(input, output) click to toggle source

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

bold(*args, **kwargs) click to toggle source

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
bold_error(*args, **kwargs) click to toggle source

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
error(args, **kwargs) click to toggle source

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
info(*args, **kwargs) click to toggle source

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
newline() click to toggle source

Print a blank line.

# File lib/arcanus/ui.rb, line 107
def newline
  print('')
end
print(output, newline: true) click to toggle source

Print the specified output.

@param output [String] @param newline [Boolean] whether to append a newline

secret_user_input() click to toggle source

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
spinner(*args) { || ... } click to toggle source

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
success(*args, **kwargs) click to toggle source

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
table(options = {}) { |t| ... } click to toggle source

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
user_input() click to toggle source

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
warning(*args, **kwargs) click to toggle source

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