Module: CLI::UI::Spinner
- Defined in:
- lib/cli/ui/spinner.rb,
lib/cli/ui/spinner/async.rb,
lib/cli/ui/spinner/spin_group.rb
Defined Under Namespace
Constant Summary collapse
- PERIOD =
seconds
0.1
- TASK_FAILED =
:task_failed
- RUNES =
CLI::UI::OS.current.supports_emoji? ? %w(⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏).freeze : %w(\\ | / - \\ | / -).freeze
- GLYPHS =
colors.zip(RUNES).map(&:join)
Class Attribute Summary collapse
-
.index ⇒ Object
Returns the value of attribute index.
Class Method Summary collapse
-
.current_rune ⇒ Object
We use this from CLI::UI::Widgets::Status to render an additional spinner next to the “working” element.
-
.spin(title, auto_debrief: true, &block) ⇒ Object
Adds a single spinner Uses an interactive session to allow the user to pick an answer Can use arrows, y/n, numbers (1/2), and vim bindings to control.
Class Attribute Details
.index ⇒ Object
Returns the value of attribute index.
20 21 22 |
# File 'lib/cli/ui/spinner.rb', line 20 def index @index end |
Class Method Details
.current_rune ⇒ Object
We use this from CLI::UI::Widgets::Status to render an additional spinner next to the “working” element. While this global state looks a bit repulsive at first, it’s worth realizing that:
-
It’s managed by the SpinGroup#wait method, not individual tasks; and
-
It would be complete insanity to run two separate but concurrent SpinGroups.
While it would be possible to stitch through some connection between the SpinGroup and the Widgets included in its title, this is simpler in practice and seems unlikely to cause issues in practice.
32 33 34 |
# File 'lib/cli/ui/spinner.rb', line 32 def current_rune RUNES[index || 0] end |
.spin(title, auto_debrief: true, &block) ⇒ Object
Adds a single spinner Uses an interactive session to allow the user to pick an answer Can use arrows, y/n, numbers (1/2), and vim bindings to control
Attributes
-
title
- Title of the spinner to use
Options
-
:auto_debrief
- Automatically debrief exceptions? Default to true
Block
-
*spinner+ - Instance of the spinner. Can call
update_title
to update the user of changes
Example Usage:
CLI::UI::Spinner.spin('Title') { sleep 1.0 }
59 60 61 62 63 |
# File 'lib/cli/ui/spinner.rb', line 59 def self.spin(title, auto_debrief: true, &block) sg = SpinGroup.new(auto_debrief: auto_debrief) sg.add(title, &block) sg.wait end |