Sha256: e4fdc164f7659ff7fe2693d7f5ee3347c8b425e5a1fbbba6049df0eaa84339f0
Contents?: true
Size: 1.78 KB
Versions: 3
Compression:
Stored size: 1.78 KB
Contents
require 'dev/ui' module Dev module UI class Progress FILLED_BAR = Dev::UI::Glyph.new("◾", 0x2588, Color::CYAN) UNFILLED_BAR = Dev::UI::Glyph.new("◽", 0x2588, Color::WHITE) # Set the percent to X # Dev::UI::Progress.progress do |bar| # bar.tick(set_percent: percent) # end # # Increase the percent by 1 # 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 def self.progress bar = Progress.new 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 def initialize(width: Terminal.width) @percent_done = 0 @max_width = width end 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 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.to_s * filled), (UNFILLED_BAR.to_s * unfilled), suffix ].join end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dev-ui-0.1.0 | lib/dev/ui/progress.rb |
dev-ui-0.0.2 | lib/dev/ui/progress.rb |
dev-ui-0.0.1 | lib/dev/ui/progress.rb |