class Dev::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
Dev::UI::Progress.progress do |bar| bar.tick(set_percent: percent) end
Increase the percent by 1 percent
Dev::UI::Progress.progress do |bar| bar.tick end
Increase the percent by X
Dev::UI::Progress.progress do |bar| bar.tick(percent: 5) end
# File lib/dev/ui/progress.rb, line 31 def self.progress(width: Terminal.width) bar = Progress.new(width: width) print Dev::UI::ANSI.hide_cursor yield(bar) ensure puts bar.to_s Dev::UI.raw do print(ANSI.show_cursor) puts(ANSI.previous_line + ANSI.end_of_line) 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
# File lib/dev/ui/progress.rb, line 63 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 Dev::UI::ANSI.previous_line print Dev::UI::ANSI.end_of_line + "\n" end
to_s()
click to toggle source
Format the progress bar to be printed to terminal
# File lib/dev/ui/progress.rb, line 76 def to_s suffix = " #{(@percent_done * 100).round(2)}%" workable_width = @max_width - Frame.prefix_width - suffix.size filled = (@percent_done * workable_width.to_f).ceil unfilled = workable_width - filled Dev::UI.resolve_text [ FILLED_BAR + ' ' * filled, UNFILLED_BAR + ' ' * unfilled, Dev::UI::Color::RESET.code + suffix ].join end