Class: Arcanus::UI

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/arcanus/ui.rb

Overview

Manages all interaction with the user.

Instance Method Summary collapse

Constructor Details

#initialize(input, output) ⇒ UI

Creates a Arcanus::UI that mediates between the given input/output streams.

Parameters:



15
16
17
18
19
20
# File 'lib/arcanus/ui.rb', line 15

def initialize(input, output)
  @input = input
  @output = output
  @pastel = Pastel.new(enabled: output.tty?)
  @shell = TTY::Shell.new
end

Instance Method Details

#bold(*args, **kwargs) ⇒ Object

Print output in bold face.

Parameters:

  • args (Array)
  • kwargs (Hash)


59
60
61
# File 'lib/arcanus/ui.rb', line 59

def bold(*args, **kwargs)
  print(@pastel.bold(*args), **kwargs)
end

#bold_error(*args, **kwargs) ⇒ Object

Print the specified output in a bold face and color indicative of error.

Parameters:

  • args (Array)
  • kwargs (Hash)


75
76
77
# File 'lib/arcanus/ui.rb', line 75

def bold_error(*args, **kwargs)
  print(@pastel.bold.red(*args), **kwargs)
end

#error(args, **kwargs) ⇒ Object

Print the specified output in a color indicative of error.

Parameters:

  • args (Array)
  • kwargs (Hash)


67
68
69
# File 'lib/arcanus/ui.rb', line 67

def error(args, **kwargs)
  print(@pastel.red(*args), **kwargs)
end

#info(*args, **kwargs) ⇒ Object

Print the specified output in a color indicating information.

Parameters:

  • args (Array)
  • kwargs (Hash)


99
100
101
# File 'lib/arcanus/ui.rb', line 99

def info(*args, **kwargs)
  print(@pastel.cyan(*args), **kwargs)
end

#newlineObject

Print a blank line.



104
105
106
# File 'lib/arcanus/ui.rb', line 104

def newline
  print('')
end

Print the specified output.

Parameters:

  • output (String)
  • newline (Boolean) (defaults to: true)

    whether to append a newline



50
51
52
53
# File 'lib/arcanus/ui.rb', line 50

def print(output, newline: true)
  @output.print(output)
  @output.print("\n") if newline
end

#secret_user_inputString?

Get user input without echoing (useful for passwords).

Does not strip extraneous whitespace (since it could be part of password).

Returns:

  • (String, nil)


38
39
40
41
42
43
44
# File 'lib/arcanus/ui.rb', line 38

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) ⇒ Object

Execute a command with a spinner animation until it completes.



109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/arcanus/ui.rb', line 109

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) ⇒ Object

Print the specified output in a color indicative of success.

Parameters:

  • args (Array)
  • kwargs (Hash)


83
84
85
# File 'lib/arcanus/ui.rb', line 83

def success(*args, **kwargs)
  print(@pastel.green(*args), **kwargs)
end

#table(options = {}) {|t| ... } ⇒ Object

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.

Yields:

  • (t)


128
129
130
131
132
# File 'lib/arcanus/ui.rb', line 128

def table(options = {})
  t = TTY::Table.new(options)
  yield t
  print(t.render(:unicode, options))
end

#user_inputString?

Get user input, stripping extraneous whitespace.

Returns:

  • (String, nil)


25
26
27
28
29
30
31
# File 'lib/arcanus/ui.rb', line 25

def user_input
  if input = @input.get
    input.strip
  end
rescue Interrupt
  exit 130 # User cancelled
end

#warning(*args, **kwargs) ⇒ Object

Print the specified output in a color indicative of a warning.

Parameters:

  • args (Array)
  • kwargs (Hash)


91
92
93
# File 'lib/arcanus/ui.rb', line 91

def warning(*args, **kwargs)
  print(@pastel.yellow(*args), **kwargs)
end