class CLI::UI::Progress
Constants
- FILLED_BAR
A Cyan filled block
- UNFILLED_BAR
A bright white block
Public Class Methods
new(width: Terminal.width)
click to toggle source
progress(width: Terminal.width) { |bar| ... }
click to toggle source
Add a progress bar to the terminal output
Example Usage:¶ ↑
Set the percent to X
CLI::UI::Progress.progress do |bar| bar.tick(set_percent: percent) end
Increase the percent by 1 percent
CLI::UI::Progress.progress do |bar| bar.tick end
Increase the percent by X
CLI::UI::Progress.progress do |bar| bar.tick(percent: 0.05) end
# File lib/cli/ui/progress.rb, line 31 def self.progress(width: Terminal.width) bar = Progress.new(width: width) print(CLI::UI::ANSI.hide_cursor) yield(bar) ensure puts bar.to_s CLI::UI.raw do print(ANSI.show_cursor) end end
Public Instance Methods
tick(percent: 0.01, set_percent: nil)
click to toggle source
Set the progress of the bar. Typically used in a Progress.progress
block
Options¶ ↑
One of the follow can be used, but not both together
-
:percent
- Increment progress by a specific percent amount -
:set_percent
- Set progress to a specific percent
Note: The :percent
and +:set_percent must be between 0.00 and 1.0
# File lib/cli/ui/progress.rb, line 64 def tick(percent: 0.01, set_percent: nil) raise ArgumentError, 'percent and set_percent cannot both be specified' if percent != 0.01 && set_percent @percent_done += percent @percent_done = set_percent if set_percent @percent_done = [@percent_done, 1.0].min # Make sure we can't go above 1.0 print(to_s) print(CLI::UI::ANSI.previous_line + "\n") end
to_s()
click to toggle source
Format the progress bar to be printed to terminal
# File lib/cli/ui/progress.rb, line 76 def to_s suffix = " #{(@percent_done * 100).floor}%".ljust(5) workable_width = @max_width - Frame.prefix_width - suffix.size filled = [(@percent_done * workable_width.to_f).ceil, 0].max unfilled = [workable_width - filled, 0].max CLI::UI.resolve_text([ FILLED_BAR + ' ' * filled, UNFILLED_BAR + ' ' * unfilled, CLI::UI::Color::RESET.code + suffix, ].join) end