Module: Toys::StandardMixins::Terminal

Includes:
Mixin
Defined in:
lib/toys/standard_mixins/terminal.rb

Overview

A mixin that provides a simple terminal. It includes a set of methods that produce styled output, get user input, and otherwise interact with the user's terminal. This mixin is not as richly featured as other mixins such as Highline, but it has no gem dependencies so is ideal for basic cases.

You may make these methods available to your tool by including the following directive in your tool configuration:

include :terminal

A Terminal object will then be available by calling the #terminal method. For information on using this object, see the documentation for Utils::Terminal. Some of the most useful methods are also mixed into the tool and can be called directly.

You can configure the Terminal object by passing options to the include directive. For example:

include :terminal, styled: true

The arguments will be passed on to Utils::Terminal#initialize.

Constant Summary collapse

KEY =

Context key for the terminal object.

::Object.new.freeze

Instance Method Summary collapse

Methods included from Mixin

create

Instance Method Details

#ask(prompt, *styles, default: nil, trailing_text: :default) ⇒ String

Ask a question and get a response.



91
92
93
# File 'lib/toys/standard_mixins/terminal.rb', line 91

def ask(prompt, *styles, default: nil, trailing_text: :default)
  self[KEY].ask(prompt, *styles, default: default, trailing_text: trailing_text)
end

#confirm(prompt = "Proceed?", *styles, default: nil) ⇒ Boolean

Confirm with the user.



107
108
109
# File 'lib/toys/standard_mixins/terminal.rb', line 107

def confirm(prompt = "Proceed?", *styles, default: nil)
  self[KEY].confirm(prompt, *styles, default: default)
end

#puts(str = "", *styles) ⇒ self Also known as: say

Write a line, appending a newline if one is not already present.



56
57
58
59
# File 'lib/toys/standard_mixins/terminal.rb', line 56

def puts(str = "", *styles)
  self[KEY].puts(str, *styles)
  self
end

#spinner(leading_text: "", final_text: "", frame_length: nil, frames: nil, style: nil, &block) ⇒ Object

Display a spinner during a task. You should provide a block that performs the long-running task. While the block is executing, a spinner will be displayed.



131
132
133
134
135
136
# File 'lib/toys/standard_mixins/terminal.rb', line 131

def spinner(leading_text: "", final_text: "",
            frame_length: nil, frames: nil, style: nil, &block)
  self[KEY].spinner(leading_text: leading_text, final_text: final_text,
                    frame_length: frame_length, frames: frames, style: style,
                    &block)
end

#terminalToys::Utils::Terminal

A tool-wide terminal instance



42
43
44
# File 'lib/toys/standard_mixins/terminal.rb', line 42

def terminal
  self[KEY]
end

#write(str = "", *styles) ⇒ self

Write a partial line without appending a newline.



72
73
74
75
# File 'lib/toys/standard_mixins/terminal.rb', line 72

def write(str = "", *styles)
  self[KEY].write(str, *styles)
  self
end