tty-progressbar 0.10.1 → 0.11.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 +4 -4
- data/.travis.yml +4 -3
- data/CHANGELOG.md +14 -0
- data/Gemfile +4 -4
- data/README.md +1 -1
- data/lib/tty-progressbar.rb +0 -24
- data/lib/tty/progressbar.rb +11 -2
- data/lib/tty/progressbar/converter.rb +28 -12
- data/lib/tty/progressbar/formatter.rb +15 -0
- data/lib/tty/progressbar/formatter/byte_rate.rb +4 -3
- data/lib/tty/progressbar/formatter/current_byte.rb +3 -2
- data/lib/tty/progressbar/formatter/elapsed.rb +3 -2
- data/lib/tty/progressbar/formatter/estimated.rb +3 -2
- data/lib/tty/progressbar/formatter/mean_byte.rb +3 -2
- data/lib/tty/progressbar/formatter/mean_rate.rb +3 -2
- data/lib/tty/progressbar/formatter/rate.rb +3 -2
- data/lib/tty/progressbar/formatter/total_byte.rb +3 -2
- data/lib/tty/progressbar/version.rb +1 -1
- data/spec/unit/converter/to_bytes_spec.rb +25 -1
- data/spec/unit/converter/to_seconds_spec.rb +1 -1
- data/spec/unit/converter/to_time_spec.rb +1 -1
- data/spec/unit/formatter/byte_rate_spec.rb +2 -2
- data/spec/unit/formatter/mean_byte_spec.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2eaaf2c7343d9acdfb829ee31ce58673a0e57874
|
4
|
+
data.tar.gz: 6b7b3f3e8ccef0d0ce4eadb728404b11113330b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c51b18a4f26219bf19628fd1c406e2cfd94d6857fb236c304a535a68723828b21e86f851d8ef524453c77761cada81e1804162d5278f06149921b31c66964ffe
|
7
|
+
data.tar.gz: b6b3f6800919a9b5dbc31edf85b35c23da38760c3dd580aa611febd0870fa42424bfcb7e44b61dbdd7a14d02d08f05ccd915fb1e5a4e1399b3840e33897c1c1d
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## [v0.11.0] - 2017-04-04
|
4
|
+
|
5
|
+
### Added
|
6
|
+
* Add :decimals, :separator, :unit_separator to Converter#to_bytes
|
7
|
+
* Add ability to Converter#to_bytes to calculate higher sizes TB, PB & EB
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
* Change files loading
|
11
|
+
* Change Converter to be a module
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
* Fix :byte_rate token to correctly format bytes
|
15
|
+
|
3
16
|
## [v0.10.1] - 2016-12-26
|
4
17
|
|
5
18
|
### Fixed
|
@@ -95,6 +108,7 @@
|
|
95
108
|
|
96
109
|
* Initial implementation and release
|
97
110
|
|
111
|
+
[v0.11.0]: https://github.com/peter-murach/tty-progressbar/compare/v0.10.1...v0.11.0
|
98
112
|
[v0.10.1]: https://github.com/peter-murach/tty-progressbar/compare/v0.10.0...v0.10.1
|
99
113
|
[v0.10.0]: https://github.com/peter-murach/tty-progressbar/compare/v0.9.0...v0.10.0
|
100
114
|
[v0.9.0]: https://github.com/peter-murach/tty-progressbar/compare/v0.8.2...v0.9.0
|
data/Gemfile
CHANGED
@@ -3,15 +3,15 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
group :test do
|
6
|
-
gem 'rspec', '~> 3.
|
7
|
-
gem '
|
8
|
-
gem '
|
9
|
-
gem 'pastel', '~> 0.6.0'
|
6
|
+
gem 'rspec', '~> 3.5.0'
|
7
|
+
gem 'timecop', '~> 0.8.1'
|
8
|
+
gem 'pastel', '~> 0.7.0'
|
10
9
|
gem 'coveralls', '~> 0.8.13'
|
11
10
|
gem 'simplecov', '~> 0.11.2'
|
12
11
|
gem 'term-ansicolor', '=1.3.2'
|
13
12
|
end
|
14
13
|
|
15
14
|
group :metrics do
|
15
|
+
gem 'yard', '~> 0.8.7'
|
16
16
|
gem 'yardstick', '~> 0.9.9'
|
17
17
|
end
|
data/README.md
CHANGED
data/lib/tty-progressbar.rb
CHANGED
@@ -1,27 +1,3 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require 'io/console'
|
4
|
-
require 'forwardable'
|
5
|
-
require 'tty-screen'
|
6
|
-
|
7
|
-
require 'tty/progressbar/configuration'
|
8
|
-
require 'tty/progressbar/converter'
|
9
|
-
require 'tty/progressbar/version'
|
10
|
-
require 'tty/progressbar/pipeline'
|
11
|
-
require 'tty/progressbar/formatter'
|
12
|
-
require 'tty/progressbar/meter'
|
13
|
-
|
14
|
-
require 'tty/progressbar/formatter/bar'
|
15
|
-
require 'tty/progressbar/formatter/current'
|
16
|
-
require 'tty/progressbar/formatter/current_byte'
|
17
|
-
require 'tty/progressbar/formatter/elapsed'
|
18
|
-
require 'tty/progressbar/formatter/estimated'
|
19
|
-
require 'tty/progressbar/formatter/percent'
|
20
|
-
require 'tty/progressbar/formatter/rate'
|
21
|
-
require 'tty/progressbar/formatter/byte_rate'
|
22
|
-
require 'tty/progressbar/formatter/mean_rate'
|
23
|
-
require 'tty/progressbar/formatter/mean_byte'
|
24
|
-
require 'tty/progressbar/formatter/total'
|
25
|
-
require 'tty/progressbar/formatter/total_byte'
|
26
|
-
|
27
3
|
require 'tty/progressbar'
|
data/lib/tty/progressbar.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require 'io/console'
|
4
|
+
require 'forwardable'
|
5
|
+
require 'tty-screen'
|
6
|
+
|
7
|
+
require_relative 'progressbar/configuration'
|
8
|
+
require_relative 'progressbar/formatter'
|
9
|
+
require_relative 'progressbar/meter'
|
10
|
+
require_relative 'progressbar/version'
|
11
|
+
|
3
12
|
module TTY
|
4
13
|
# Used for creating terminal progress bar
|
5
14
|
#
|
@@ -57,7 +66,7 @@ module TTY
|
|
57
66
|
# @api public
|
58
67
|
def initialize(format, options = {})
|
59
68
|
@format = format
|
60
|
-
@configuration = Configuration.new(options)
|
69
|
+
@configuration = TTY::ProgressBar::Configuration.new(options)
|
61
70
|
yield @configuration if block_given?
|
62
71
|
|
63
72
|
@width = 0 if no_width
|
@@ -71,7 +80,7 @@ module TTY
|
|
71
80
|
@started = false
|
72
81
|
@tokens = {}
|
73
82
|
@formatter = TTY::ProgressBar::Formatter.new
|
74
|
-
@meter = Meter.new(options.fetch(:interval, 1))
|
83
|
+
@meter = TTY::ProgressBar::Meter.new(options.fetch(:interval, 1))
|
75
84
|
|
76
85
|
@formatter.load
|
77
86
|
end
|
@@ -5,7 +5,7 @@ module TTY
|
|
5
5
|
# Responsible for converting values to different formats
|
6
6
|
#
|
7
7
|
# @api public
|
8
|
-
|
8
|
+
module Converter
|
9
9
|
HOURSECONDS = 3600
|
10
10
|
|
11
11
|
# Convert seconds to time notation
|
@@ -30,6 +30,7 @@ module TTY
|
|
30
30
|
sprintf('%2ds', seconds)
|
31
31
|
end
|
32
32
|
end
|
33
|
+
module_function :to_time
|
33
34
|
|
34
35
|
# Convert seconds to set precision
|
35
36
|
#
|
@@ -44,30 +45,45 @@ module TTY
|
|
44
45
|
precision ||= (seconds < 1 && !seconds.zero?) ? 5 : 2
|
45
46
|
sprintf "%5.#{precision}f", seconds
|
46
47
|
end
|
48
|
+
module_function :to_seconds
|
47
49
|
|
48
|
-
|
49
|
-
MEGABYTE = KILOBYTE * 1024
|
50
|
-
GIGABYTE = MEGABYTE * 1024
|
50
|
+
BYTE_UNITS = %w(b kb mb gb tb pb eb).freeze
|
51
51
|
|
52
52
|
# Convert value to bytes
|
53
53
|
#
|
54
54
|
# @param [Numeric] value
|
55
55
|
# the value to convert to bytes
|
56
|
+
# @param [Hash[Symbol]] options
|
57
|
+
# @option [Integer] :decimals
|
58
|
+
# the number of decimals parts
|
59
|
+
# @option [String] :separator
|
60
|
+
# the separator to use for thousands in a number
|
61
|
+
# @option [String] :unit_separator
|
62
|
+
# the separtor to use between number and unit
|
56
63
|
#
|
57
64
|
# @return [String]
|
58
65
|
#
|
59
66
|
# @api public
|
60
|
-
def to_bytes(value)
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
+
def to_bytes(value, options = {})
|
68
|
+
decimals = options.fetch(:decimals) { 2 }
|
69
|
+
separator = options.fetch(:separator) { '.' }
|
70
|
+
unit_separator = options.fetch(:unit_separator) { '' }
|
71
|
+
|
72
|
+
base = 1024
|
73
|
+
pattern = "%.#{decimals}f"
|
74
|
+
|
75
|
+
unit = BYTE_UNITS.find.with_index { |_, i| value < base ** (i + 1) }
|
76
|
+
|
77
|
+
if value < base
|
78
|
+
formatted_value = value.to_i.to_s
|
67
79
|
else
|
68
|
-
value
|
80
|
+
value_to_size = value / (base ** BYTE_UNITS.index(unit)).to_f
|
81
|
+
formatted_value = format(pattern, value_to_size)
|
69
82
|
end
|
83
|
+
|
84
|
+
formatted_value.gsub(/\./, separator) + unit_separator + unit.to_s.upcase
|
70
85
|
end
|
86
|
+
module_function :to_bytes
|
71
87
|
end # Converter
|
72
88
|
end # ProgressBar
|
73
89
|
end # TTY
|
@@ -1,5 +1,20 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require_relative 'pipeline'
|
4
|
+
|
5
|
+
require_relative 'formatter/bar'
|
6
|
+
require_relative 'formatter/current'
|
7
|
+
require_relative 'formatter/current_byte'
|
8
|
+
require_relative 'formatter/elapsed'
|
9
|
+
require_relative 'formatter/estimated'
|
10
|
+
require_relative 'formatter/percent'
|
11
|
+
require_relative 'formatter/rate'
|
12
|
+
require_relative 'formatter/byte_rate'
|
13
|
+
require_relative 'formatter/mean_rate'
|
14
|
+
require_relative 'formatter/mean_byte'
|
15
|
+
require_relative 'formatter/total'
|
16
|
+
require_relative 'formatter/total_byte'
|
17
|
+
|
3
18
|
module TTY
|
4
19
|
class ProgressBar
|
5
20
|
class Formatter
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require_relative '../converter'
|
4
|
+
|
3
5
|
module TTY
|
4
6
|
class ProgressBar
|
5
7
|
# Used by {Pipeline} to format :byte_rate token
|
@@ -9,8 +11,7 @@ module TTY
|
|
9
11
|
MATCHER = /:byte_rate/i
|
10
12
|
|
11
13
|
def initialize(progress)
|
12
|
-
@progress
|
13
|
-
@converter = Converter.new
|
14
|
+
@progress = progress
|
14
15
|
end
|
15
16
|
|
16
17
|
# Determines whether this formatter is applied or not.
|
@@ -31,7 +32,7 @@ module TTY
|
|
31
32
|
#
|
32
33
|
# @api public
|
33
34
|
def format(value)
|
34
|
-
formatted =
|
35
|
+
formatted = Converter.to_bytes(@progress.rate)
|
35
36
|
value.gsub(MATCHER, formatted)
|
36
37
|
end
|
37
38
|
end # ByteRateFormatter
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require_relative '../converter'
|
4
|
+
|
3
5
|
module TTY
|
4
6
|
class ProgressBar
|
5
7
|
# Used by {Pipeline} to format :byte and :current_byte tokens
|
@@ -10,7 +12,6 @@ module TTY
|
|
10
12
|
|
11
13
|
def initialize(progress)
|
12
14
|
@progress = progress
|
13
|
-
@converter = Converter.new
|
14
15
|
end
|
15
16
|
|
16
17
|
# Determines whether this formatter is applied or not.
|
@@ -25,7 +26,7 @@ module TTY
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def format(value)
|
28
|
-
bytes =
|
29
|
+
bytes = Converter.to_bytes(@progress.current)
|
29
30
|
value.gsub(MATCHER, bytes)
|
30
31
|
end
|
31
32
|
end # ByteFormatter
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require_relative '../converter'
|
4
|
+
|
3
5
|
module TTY
|
4
6
|
class ProgressBar
|
5
7
|
# Used by {Pipeline} to format :elapsed token
|
@@ -10,7 +12,6 @@ module TTY
|
|
10
12
|
|
11
13
|
def initialize(progress)
|
12
14
|
@progress = progress
|
13
|
-
@converter = Converter.new
|
14
15
|
end
|
15
16
|
|
16
17
|
# Determines whether this formatter is applied or not.
|
@@ -26,7 +27,7 @@ module TTY
|
|
26
27
|
|
27
28
|
def format(value)
|
28
29
|
elapsed = (Time.now - @progress.start_at)
|
29
|
-
value.gsub(MATCHER,
|
30
|
+
value.gsub(MATCHER, Converter.to_time(elapsed))
|
30
31
|
end
|
31
32
|
end # ElapsedFormatter
|
32
33
|
end # ProgressBar
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require_relative '../converter'
|
4
|
+
|
3
5
|
module TTY
|
4
6
|
class ProgressBar
|
5
7
|
# Used by {Pipeline} to format :eta token
|
@@ -10,7 +12,6 @@ module TTY
|
|
10
12
|
|
11
13
|
def initialize(progress)
|
12
14
|
@progress = progress
|
13
|
-
@converter = Converter.new
|
14
15
|
end
|
15
16
|
|
16
17
|
# Determines whether this formatter is applied or not.
|
@@ -28,7 +29,7 @@ module TTY
|
|
28
29
|
elapsed = Time.now - @progress.start_at
|
29
30
|
estimated = (elapsed / @progress.ratio).to_f - elapsed
|
30
31
|
estimated = (estimated.infinite? || estimated < 0) ? 0.0 : estimated
|
31
|
-
value.gsub(MATCHER,
|
32
|
+
value.gsub(MATCHER, Converter.to_time(estimated))
|
32
33
|
end
|
33
34
|
end # ElapsedFormatter
|
34
35
|
end # ProgressBar
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require_relative '../converter'
|
4
|
+
|
3
5
|
module TTY
|
4
6
|
class ProgressBar
|
5
7
|
# Used by {Pipeline} to format :mean_byte token
|
@@ -10,7 +12,6 @@ module TTY
|
|
10
12
|
|
11
13
|
def initialize(progress)
|
12
14
|
@progress = progress
|
13
|
-
@converter = Converter.new
|
14
15
|
end
|
15
16
|
|
16
17
|
# Determines whether this formatter is applied or not.
|
@@ -31,7 +32,7 @@ module TTY
|
|
31
32
|
#
|
32
33
|
# @api public
|
33
34
|
def format(value)
|
34
|
-
formatted =
|
35
|
+
formatted = Converter.to_bytes(@progress.mean_rate)
|
35
36
|
value.gsub(MATCHER, formatted)
|
36
37
|
end
|
37
38
|
end # MeanByteFormatter
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require_relative '../converter'
|
4
|
+
|
3
5
|
module TTY
|
4
6
|
class ProgressBar
|
5
7
|
# Used by {Pipeline} to format :mean_rate token
|
@@ -10,7 +12,6 @@ module TTY
|
|
10
12
|
|
11
13
|
def initialize(progress)
|
12
14
|
@progress = progress
|
13
|
-
@converter = Converter.new
|
14
15
|
end
|
15
16
|
|
16
17
|
# Determines whether this formatter is applied or not.
|
@@ -31,7 +32,7 @@ module TTY
|
|
31
32
|
#
|
32
33
|
# @api public
|
33
34
|
def format(value)
|
34
|
-
formatted =
|
35
|
+
formatted = Converter.to_seconds(@progress.mean_rate)
|
35
36
|
value.gsub(MATCHER, formatted)
|
36
37
|
end
|
37
38
|
end # MeanRateFormatter
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require_relative '../converter'
|
4
|
+
|
3
5
|
module TTY
|
4
6
|
class ProgressBar
|
5
7
|
# Used by {Pipeline} to format :rate token
|
@@ -10,7 +12,6 @@ module TTY
|
|
10
12
|
|
11
13
|
def initialize(progress)
|
12
14
|
@progress = progress
|
13
|
-
@converter = Converter.new
|
14
15
|
end
|
15
16
|
|
16
17
|
# Determines whether this formatter is applied or not.
|
@@ -31,7 +32,7 @@ module TTY
|
|
31
32
|
#
|
32
33
|
# @api public
|
33
34
|
def format(value)
|
34
|
-
formatted =
|
35
|
+
formatted = Converter.to_seconds(@progress.rate)
|
35
36
|
value.gsub(MATCHER, formatted)
|
36
37
|
end
|
37
38
|
end # RateFormatter
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require_relative '../converter'
|
4
|
+
|
3
5
|
module TTY
|
4
6
|
class ProgressBar
|
5
7
|
# Used by {Pipeline} to format :total_byte token
|
@@ -10,7 +12,6 @@ module TTY
|
|
10
12
|
|
11
13
|
def initialize(progress, *args, &block)
|
12
14
|
@progress = progress
|
13
|
-
@converter = Converter.new
|
14
15
|
end
|
15
16
|
|
16
17
|
# Determines whether this formatter is applied or not.
|
@@ -25,7 +26,7 @@ module TTY
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def format(value)
|
28
|
-
bytes =
|
29
|
+
bytes = Converter.to_bytes(@progress.total)
|
29
30
|
value.gsub(MATCHER, bytes)
|
30
31
|
end
|
31
32
|
end # TotalByteFormatter
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
RSpec.describe TTY::ProgressBar::Converter, '#to_bytes' do
|
4
|
-
subject(:converter) { described_class
|
4
|
+
subject(:converter) { described_class }
|
5
5
|
|
6
6
|
it "converts 1000 to bytes" do
|
7
7
|
expect(converter.to_bytes(1000)).to eq('1000B')
|
@@ -11,10 +11,34 @@ RSpec.describe TTY::ProgressBar::Converter, '#to_bytes' do
|
|
11
11
|
expect(converter.to_bytes(1024)).to eq('1.00KB')
|
12
12
|
end
|
13
13
|
|
14
|
+
it "converts 1234 to bytes" do
|
15
|
+
expect(converter.to_bytes(1234)).to eq('1.21KB')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "converts 12345 to bytes" do
|
19
|
+
expect(converter.to_bytes(12345)).to eq('12.06KB')
|
20
|
+
end
|
21
|
+
|
14
22
|
it "converts 2000 to bytes" do
|
15
23
|
expect(converter.to_bytes(2000)).to eq('1.95KB')
|
16
24
|
end
|
17
25
|
|
26
|
+
it "converts 1234567 to bytes" do
|
27
|
+
expect(converter.to_bytes(1234567)).to eq('1.18MB')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "converts 1234567 to bytes with :separator" do
|
31
|
+
expect(converter.to_bytes(1234567, separator: ',')).to eq('1,18MB')
|
32
|
+
end
|
33
|
+
|
34
|
+
it "converts 1234567 to bytes with :unit_separator" do
|
35
|
+
expect(converter.to_bytes(1234567, unit_separator: ' ')).to eq('1.18 MB')
|
36
|
+
end
|
37
|
+
|
38
|
+
it "converts 1234567 to bytes with comma as a separator" do
|
39
|
+
expect(converter.to_bytes(1234567, decimals: 1)).to eq('1.2MB')
|
40
|
+
end
|
41
|
+
|
18
42
|
it "converts 10_000_000 to bytes" do
|
19
43
|
expect(converter.to_bytes(10_000_000)).to eq('9.54MB')
|
20
44
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
RSpec.describe TTY::ProgressBar::Converter, '#to_seconds' do
|
4
|
-
subject(:converter) { described_class
|
4
|
+
subject(:converter) { described_class }
|
5
5
|
|
6
6
|
it "ensure 5 digit precision for < 1" do
|
7
7
|
expect(converter.to_seconds(0.000005)).to eq("0.00001")
|
@@ -24,9 +24,9 @@ RSpec.describe TTY::ProgressBar, ':mean_byte token' do
|
|
24
24
|
output.rewind
|
25
25
|
expect(output.read).to eq([
|
26
26
|
"\e[1G0B",
|
27
|
-
"\e[
|
28
|
-
"\e[
|
29
|
-
"\e[
|
27
|
+
"\e[1G500B",
|
28
|
+
"\e[1G750B",
|
29
|
+
"\e[1G1000B",
|
30
30
|
"\e[1G1.22KB\n"
|
31
31
|
].join)
|
32
32
|
Timecop.return
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tty-progressbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Murach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tty-screen
|