cli_progress_bar 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 399a70e89cbbf1b0185cd00850c4522f4bbe568f73cae6b05e1717ecb41d729d
|
|
4
|
+
data.tar.gz: 38fe781cb8198a0afdd6f2a5760cb7b323957f8446ca938ab23b549316c7b3ea
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 11e2e671777899f3100a43a8d1a5350c60b3e288c5932bb27dbea21c4d48bbf4d8a994ebf44821e6ca41fa5c921289400ad8eec44d41616ecd51b74f53501a7a
|
|
7
|
+
data.tar.gz: ec3ed2e3b4de76cecb6798d5cc908b8ccc063195cec1f10c6e5f69584df07d37dd48d4789bd85bc5641b041d1df88618444db1b9d2205ca29ba77b51c40fda57
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
|
|
2
|
+
# Progress bar for items, where you increment or set the current progress
|
|
3
|
+
# as an item count against a total, from which the percentage is calculated.
|
|
4
|
+
# e.g. max_items: 10, num_items: 5 == 50% output on the progress bar.
|
|
5
|
+
module CLIProgressBar
|
|
6
|
+
class ItemProgressBar < ProgressBar
|
|
7
|
+
attr_reader :max_items
|
|
8
|
+
|
|
9
|
+
def initialize(
|
|
10
|
+
max_items,
|
|
11
|
+
of: "", log_at: LOG_AT_ALL_PERCENTS, bar_length: BAR_LENGTH,
|
|
12
|
+
line_char: LINE_CHAR, prefix: "", suffix: "", stream: STD_OUT
|
|
13
|
+
)
|
|
14
|
+
raise "max_items must be positive" unless max_items.positive?
|
|
15
|
+
|
|
16
|
+
of = "#{max_items} #{of.strip}" unless of.empty?
|
|
17
|
+
|
|
18
|
+
super(of:, log_at:, bar_length:, line_char:, prefix:, suffix:, stream:)
|
|
19
|
+
|
|
20
|
+
@max_items = max_items
|
|
21
|
+
@current_items = 0
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def increment(by: 1, prefix: nil, suffix: nil)
|
|
25
|
+
raise "Invalid by: value" unless (@current_items + by).between?(1, @max_items)
|
|
26
|
+
|
|
27
|
+
@current_items += by
|
|
28
|
+
update_progress(prefix:, suffix:)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def update(num_items, prefix: nil, suffix: nil)
|
|
32
|
+
raise "Invalid num_items value" unless num_items.between?(1, @max_items)
|
|
33
|
+
|
|
34
|
+
@current_items = num_items
|
|
35
|
+
update_progress(prefix:, suffix:)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def update_progress(prefix: nil, suffix: nil)
|
|
41
|
+
@progress = percentage(@current_items, @max_items)
|
|
42
|
+
write_to_stream(prefix:, suffix:, items: @current_items)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def percentage(num_items, max_items)
|
|
46
|
+
num_items * 100 / max_items
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
# Progress bar for percentages, where you increment or set the current progress
|
|
3
|
+
# as a percentage and specify which percentages are to be logged to the stream.
|
|
4
|
+
module CLIProgressBar
|
|
5
|
+
class PercentProgressBar < ProgressBar
|
|
6
|
+
def initialize(
|
|
7
|
+
of: "", log_at: LOG_AT_TEN_PERCENTS, bar_length: BAR_LENGTH,
|
|
8
|
+
line_char: LINE_CHAR, prefix: "", suffix: "", stream: STD_OUT
|
|
9
|
+
)
|
|
10
|
+
super
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def increment(by: 1, prefix: nil, suffix: nil)
|
|
14
|
+
raise "Invalid by: value" unless (@progress + by).between?(1, 100)
|
|
15
|
+
|
|
16
|
+
@progress += by
|
|
17
|
+
write_to_stream(prefix:, suffix:)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def update(percent, prefix: nil, suffix: nil)
|
|
21
|
+
raise "Invalid percent value" unless percent.between?(1, 100)
|
|
22
|
+
|
|
23
|
+
@progress = percent
|
|
24
|
+
write_to_stream(prefix:, suffix:)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
|
|
2
|
+
# Parent progress bar class to be inherited from only.
|
|
3
|
+
class CLIProgressBar::ProgressBar
|
|
4
|
+
attr_reader :progress
|
|
5
|
+
|
|
6
|
+
def initialize(
|
|
7
|
+
of: "", log_at: LOG_AT_TEN_PERCENTS, bar_length: BAR_LENGTH,
|
|
8
|
+
line_char: LINE_CHAR, prefix: "", suffix: "", stream: STD_OUT
|
|
9
|
+
)
|
|
10
|
+
raise "bar_length: must be positive and even" unless bar_length.positive? && bar_length.even?
|
|
11
|
+
raise "stream: must respond to #puts" unless stream.respond_to?(:puts)
|
|
12
|
+
|
|
13
|
+
@progress = 0
|
|
14
|
+
@of = of.to_s
|
|
15
|
+
@log_at = log_at
|
|
16
|
+
@bar_length = bar_length
|
|
17
|
+
@line_char = line_char
|
|
18
|
+
@prefix = prefix
|
|
19
|
+
@suffix = suffix
|
|
20
|
+
@stream = stream
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
# Writes a single line to stream, something like:
|
|
26
|
+
#
|
|
27
|
+
# Percent: [-------------------> ] 70% of 2.3 MiB
|
|
28
|
+
# - or -
|
|
29
|
+
# Item: [------------------> ] 8 of 12 repos (66%)
|
|
30
|
+
def write_to_stream(prefix: nil, suffix: nil, items: nil)
|
|
31
|
+
raise "Invalid progress value" unless @progress.between?(1, 100)
|
|
32
|
+
|
|
33
|
+
return unless @log_at.include?(@progress)
|
|
34
|
+
|
|
35
|
+
completed_length = (@bar_length * @progress / 100).to_i
|
|
36
|
+
remaining_length = @bar_length - completed_length
|
|
37
|
+
remaining_length -= 1 if remaining_length == @bar_length
|
|
38
|
+
|
|
39
|
+
# Ensure non negative number and remove a char for the >
|
|
40
|
+
completed_length = completed_length < 1 ? 0 : completed_length - 1
|
|
41
|
+
|
|
42
|
+
prefix ||= @prefix
|
|
43
|
+
prefix = prefix.empty? ? "" : "#{prefix.strip} "
|
|
44
|
+
suffix ||= @suffix
|
|
45
|
+
suffix = suffix.empty? ? "" : " #{suffix.strip}"
|
|
46
|
+
of_str = @of.empty? ? "" : " of #{@of.strip}"
|
|
47
|
+
totals = if items
|
|
48
|
+
"#{items}#{of_str} (#{@progress}%)"
|
|
49
|
+
else
|
|
50
|
+
"#{@progress}%#{of_str}"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
line = "%s[%s>%s] %s%s" % [
|
|
54
|
+
prefix, @line_char * completed_length, " " * remaining_length, totals, suffix
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
@stream.puts(line)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "cli_progress_bar/version"
|
|
4
|
+
require_relative "cli_progress_bar/progress_bar"
|
|
5
|
+
require_relative "cli_progress_bar/percent_progress_bar"
|
|
6
|
+
require_relative "cli_progress_bar/item_progress_bar"
|
|
7
|
+
|
|
8
|
+
module CLIProgressBar
|
|
9
|
+
LOG_AT_ALL_PERCENTS = (1..100).to_a.freeze
|
|
10
|
+
LOG_AT_FIVE_PERCENTS = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100].freeze
|
|
11
|
+
LOG_AT_TEN_PERCENTS = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100].freeze
|
|
12
|
+
LOG_AT_QUARTER_PERCENTS = [25, 50, 75, 100].freeze
|
|
13
|
+
BAR_LENGTH = 60.freeze
|
|
14
|
+
LINE_CHAR = "-".freeze
|
|
15
|
+
STD_OUT = $stdout
|
|
16
|
+
|
|
17
|
+
def self.new(*args, **kwargs)
|
|
18
|
+
new_percent_bar(*args, **kwargs)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.new_percent_bar(*args, **kwargs)
|
|
22
|
+
PercentProgressBar.new(*args, **kwargs)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.new_item_bar(*args, **kwargs)
|
|
26
|
+
ItemProgressBar.new(*args, **kwargs)
|
|
27
|
+
end
|
|
28
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: cli_progress_bar
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Michael Telford
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: irb
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rake
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '13.0'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '13.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: minitest
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '5.16'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '5.16'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: byebug
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '12.0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '12.0'
|
|
68
|
+
description: A simple and customizable command line progress bar for Ruby applications
|
|
69
|
+
email:
|
|
70
|
+
- michael.telford@live.com
|
|
71
|
+
executables: []
|
|
72
|
+
extensions: []
|
|
73
|
+
extra_rdoc_files: []
|
|
74
|
+
files:
|
|
75
|
+
- lib/cli_progress_bar.rb
|
|
76
|
+
- lib/cli_progress_bar/item_progress_bar.rb
|
|
77
|
+
- lib/cli_progress_bar/percent_progress_bar.rb
|
|
78
|
+
- lib/cli_progress_bar/progress_bar.rb
|
|
79
|
+
- lib/cli_progress_bar/version.rb
|
|
80
|
+
homepage: https://github.com/michaeltelford/cli_progress_bar
|
|
81
|
+
licenses:
|
|
82
|
+
- MIT
|
|
83
|
+
metadata:
|
|
84
|
+
allowed_push_host: https://rubygems.org
|
|
85
|
+
homepage_uri: https://github.com/michaeltelford/cli_progress_bar
|
|
86
|
+
source_code_uri: https://github.com/michaeltelford/cli_progress_bar
|
|
87
|
+
rdoc_options: []
|
|
88
|
+
require_paths:
|
|
89
|
+
- lib
|
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - ">="
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '3.0'
|
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
|
+
requirements:
|
|
97
|
+
- - ">="
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
version: '0'
|
|
100
|
+
requirements: []
|
|
101
|
+
rubygems_version: 3.6.7
|
|
102
|
+
specification_version: 4
|
|
103
|
+
summary: A simple CLI progress bar for Ruby applications
|
|
104
|
+
test_files: []
|