terminal-progress 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 +7 -0
- data/lib/terminal_progress.rb +93 -0
- metadata +118 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 32e8754fe2c67746573adb545e22c71981f695c5f2b7466a3aa2ea51e411219e
|
4
|
+
data.tar.gz: 75a64bf6b8e27f9b7a74d61cecf7fc70f733d0afadb8a5ce28a43e8cafbff182
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a246a923a0ad593c3186a0fb76ad08dc186d162dc104723926cbe89bd2d29781af058f9f58b32eb1299bcc1258de9de08eeb6d09d568aee0182c7d499439728c
|
7
|
+
data.tar.gz: 2513d8249d45f48676a8bbe499258d6f458e12e287c65dba38b5dbb02ad2ac58d88a2a0a3605561dcc08dc2b2069fdd9fc5f22128f6757a000c18e6a281956d5
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'curses'
|
4
|
+
require 'colorize'
|
5
|
+
|
6
|
+
##
|
7
|
+
# Class for managing progress bars in the terminal
|
8
|
+
class TerminalProgress
|
9
|
+
# Initialize a TermProg instance with a maximum value.
|
10
|
+
#
|
11
|
+
# @param max [Integer] The maximum value of the progress bar.
|
12
|
+
def initialize(max)
|
13
|
+
Curses.raw
|
14
|
+
instance_variable_set(:@cycle, '⣷⣯⣟⡿⢿⣻⣽⣾'.split(//).cycle)
|
15
|
+
instance_variable_set(:@i, 0)
|
16
|
+
instance_variable_set(:@max, max)
|
17
|
+
instance_variable_set(:@stop, '⣾')
|
18
|
+
instance_variable_set(:@loop, loop_thread)
|
19
|
+
end
|
20
|
+
|
21
|
+
def loop_thread
|
22
|
+
Thread.new do
|
23
|
+
loop do
|
24
|
+
instance_variable_set(:@stop, @cycle.next)
|
25
|
+
printf " #{@stop}\r"
|
26
|
+
sleep 0.0625
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Increment the progress bar and print a message if present.
|
33
|
+
#
|
34
|
+
# @param message [String, nil] Optional message to display above the progress bar.
|
35
|
+
def print_progress(message = nil)
|
36
|
+
instance_variable_set(:@i, @max) if @i > @max
|
37
|
+
printf "#{' ' * Curses.cols}\r#{message}\r\n" unless message.nil?
|
38
|
+
print_line
|
39
|
+
instance_variable_set(:@i, @i + 1)
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# Print a single line of the progress bar.
|
44
|
+
def print_line
|
45
|
+
printf "#{prefix}#{'='.light_cyan * width}#{' ' * blank}#{suffix}\r"
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# This is the last call to terminate the progress loop and finish rendering the bar.
|
50
|
+
def print_complete
|
51
|
+
printf " #{@max}/#{@max}: [#{'='.light_yellow * width}#{suffix}\r\n"
|
52
|
+
kill
|
53
|
+
end
|
54
|
+
|
55
|
+
# Terminate the progress loop.
|
56
|
+
def kill
|
57
|
+
Thread.kill @loop
|
58
|
+
end
|
59
|
+
|
60
|
+
# Check if the progress loop is still alive.
|
61
|
+
#
|
62
|
+
# @return [Boolean] Returns true if the progress loop is alive, otherwise false.
|
63
|
+
def alive?
|
64
|
+
@loop.alive?
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
# Generate the prefix of the progress bar.
|
70
|
+
def prefix
|
71
|
+
" #{@stop} #{@i.to_s.rjust(@max.to_s.length)}/#{@max}: ["
|
72
|
+
end
|
73
|
+
|
74
|
+
# Calculate the maximum width for the progress bar.
|
75
|
+
def max_width
|
76
|
+
Curses.cols - prefix.length - suffix.length
|
77
|
+
end
|
78
|
+
|
79
|
+
# Calculate the current width of the progress bar.
|
80
|
+
def width
|
81
|
+
((@i / @max.to_f) * max_width).to_i
|
82
|
+
end
|
83
|
+
|
84
|
+
# Calculate the number of blank spaces in the progress bar.
|
85
|
+
def blank
|
86
|
+
max_width - width
|
87
|
+
end
|
88
|
+
|
89
|
+
# Define the suffix of the progress bar.
|
90
|
+
def suffix
|
91
|
+
']'
|
92
|
+
end
|
93
|
+
end
|
metadata
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: terminal-progress
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Lee Whittaker
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-10-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.1.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: curses
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.4.4
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.4.4
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 5.20.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 5.20.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.56.3
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.56.3
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: stringio
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.0.8
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.0.8
|
83
|
+
description: |2
|
84
|
+
Terminal Progress is a progress bar manager for Ruby applications. It
|
85
|
+
provides a simple way to display progress updates in the terminal, making
|
86
|
+
it ideal for tasks like seed data eneration, file processing, or any
|
87
|
+
operation where progress tracking is ideal.
|
88
|
+
email: whittakerlee81@gmail.com
|
89
|
+
executables: []
|
90
|
+
extensions: []
|
91
|
+
extra_rdoc_files: []
|
92
|
+
files:
|
93
|
+
- lib/terminal_progress.rb
|
94
|
+
homepage: https://github.com/Okomikeruko/terminal-progress
|
95
|
+
licenses:
|
96
|
+
- MIT
|
97
|
+
metadata: {}
|
98
|
+
post_install_message:
|
99
|
+
rdoc_options: []
|
100
|
+
require_paths:
|
101
|
+
- lib
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '3.1'
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
requirements: []
|
113
|
+
rubygems_version: 3.3.26
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: terminal-progress - Simplify progress tracking in your Ruby applications
|
117
|
+
with this simple progress bar manager.
|
118
|
+
test_files: []
|