ruby-progressbar-cli 0.0.1
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 +7 -0
- data/lib/progress_bar.rb +51 -0
- data/lib/string_format.rb +89 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b07766838b70806f80a3c0b8ae10e48b3658c55d
|
4
|
+
data.tar.gz: fd53590cd4e7a75dc2d855a30e92cd619bfb6cfa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3ccd349bc063383cc214c3ea31ed843c2ca01806bbf6c46c1423b4b705486669ca79ffff32e0b0547d5610a7d6f4ab859251b940ae7add6a3f2d1d551f1b9aec
|
7
|
+
data.tar.gz: 07adf7e3dacad3da7954a35fda28576a972f14249dd0fcc5f6e4f3732c3fdeffd17eb72906338ec0bb79933d0e74d329c0bfd75150e240b924839e87323954e2
|
data/lib/progress_bar.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative 'string_format'
|
2
|
+
|
3
|
+
class ProgressBar
|
4
|
+
|
5
|
+
attr_reader :percentage
|
6
|
+
|
7
|
+
def initialize(title: "Progress", count: 100)
|
8
|
+
@start_time = Time.now
|
9
|
+
@percentage = 0
|
10
|
+
@initial_string = "\u2591" * 50
|
11
|
+
@title = title
|
12
|
+
@count = count
|
13
|
+
end
|
14
|
+
|
15
|
+
def percentage=(value)
|
16
|
+
@percentage = value
|
17
|
+
increment(0)
|
18
|
+
end
|
19
|
+
|
20
|
+
def increment(value = 1)
|
21
|
+
unless value.zero?
|
22
|
+
@percentage += value * 100.0 / @count
|
23
|
+
error_check(@percentage)
|
24
|
+
end
|
25
|
+
rounded_percentage = @percentage.round(5)
|
26
|
+
normalized_percentage = rounded_percentage.to_i / 2
|
27
|
+
progress = "\u2588" * normalized_percentage
|
28
|
+
remaining = @initial_string[normalized_percentage..49]
|
29
|
+
print "\r#{@title}: #{progress.green}#{remaining} #{rounded_percentage.to_i}%"
|
30
|
+
puts "\nCompleted in #{time_taken}" if rounded_percentage == 100
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def time_taken
|
36
|
+
seconds = (Time.now - @start_time).round
|
37
|
+
if seconds < 60
|
38
|
+
"#{seconds}s"
|
39
|
+
elsif seconds < 3600
|
40
|
+
"#{seconds / 60}m #{seconds % 60}s"
|
41
|
+
else
|
42
|
+
"#{seconds / 3600}h #{(seconds / 60) % 60}m #{seconds % 60}s"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def error_check(value)
|
47
|
+
return if value.is_a?(Numeric) && value.between?(0, 100)
|
48
|
+
raise ArgumentError, 'Value must be a number between 0 and 100'
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
class String
|
2
|
+
# foreground colors
|
3
|
+
def black
|
4
|
+
"\e[30m#{self}\e[0m"
|
5
|
+
end
|
6
|
+
|
7
|
+
def red
|
8
|
+
"\e[31m#{self}\e[0m"
|
9
|
+
end
|
10
|
+
|
11
|
+
def green
|
12
|
+
"\e[32m#{self}\e[0m"
|
13
|
+
end
|
14
|
+
|
15
|
+
def yellow
|
16
|
+
"\e[33m#{self}\e[0m"
|
17
|
+
end
|
18
|
+
|
19
|
+
def blue
|
20
|
+
"\e[34m#{self}\e[0m"
|
21
|
+
end
|
22
|
+
|
23
|
+
def pink
|
24
|
+
"\e[35m#{self}\e[0m"
|
25
|
+
end
|
26
|
+
|
27
|
+
def light_blue
|
28
|
+
"\e[36m#{self}\e[0m"
|
29
|
+
end
|
30
|
+
|
31
|
+
def grey
|
32
|
+
"\e[37m#{self}\e[0m"
|
33
|
+
end
|
34
|
+
|
35
|
+
# back ground colors
|
36
|
+
def bg_black
|
37
|
+
"\e[40m#{self}\e[0m"
|
38
|
+
end
|
39
|
+
|
40
|
+
def bg_red
|
41
|
+
"\e[41m#{self}\e[0m"
|
42
|
+
end
|
43
|
+
|
44
|
+
def bg_green
|
45
|
+
"\e[42m#{self}\e[0m"
|
46
|
+
end
|
47
|
+
|
48
|
+
def bg_brown
|
49
|
+
"\e[43m#{self}\e[0m"
|
50
|
+
end
|
51
|
+
|
52
|
+
def bg_blue
|
53
|
+
"\e[44m#{self}\e[0m"
|
54
|
+
end
|
55
|
+
|
56
|
+
def bg_magenta
|
57
|
+
"\e[45m#{self}\e[0m"
|
58
|
+
end
|
59
|
+
|
60
|
+
def bg_cyan
|
61
|
+
"\e[46m#{self}\e[0m"
|
62
|
+
end
|
63
|
+
|
64
|
+
def bg_gray
|
65
|
+
"\e[47m#{self}\e[0m"
|
66
|
+
end
|
67
|
+
|
68
|
+
# formatting
|
69
|
+
def bold
|
70
|
+
"\e[1m#{self}\e[22m"
|
71
|
+
end
|
72
|
+
|
73
|
+
def italic
|
74
|
+
"\e[3m#{self}\e[23m"
|
75
|
+
end
|
76
|
+
|
77
|
+
def underline
|
78
|
+
"\e[4m#{self}\e[24m"
|
79
|
+
end
|
80
|
+
|
81
|
+
def blink
|
82
|
+
"\e[5m#{self}\e[25m"
|
83
|
+
end
|
84
|
+
|
85
|
+
def reverse_color
|
86
|
+
"\e[7m#{self}\e[27m"
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby-progressbar-cli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tony Sunny
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-06-01 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A simple library to display progressbar in stdout.
|
14
|
+
email: tonysunnymails@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/progress_bar.rb
|
20
|
+
- lib/string_format.rb
|
21
|
+
homepage:
|
22
|
+
licenses:
|
23
|
+
- NGPL
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.6.12
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: Progress Bar is a simple library to display progress bar in terminal.
|
45
|
+
test_files: []
|