tty-progressbar 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f04f4c768fd866bf975c789315865b20506ee916
4
- data.tar.gz: c50d09a231f989552fb19baa5ea81bcb5cc49a5c
3
+ metadata.gz: ff767a06ae19986026a9fc6bf8542246a66aa114
4
+ data.tar.gz: ee1b4fdfcf5e032a0f57b45edfc6076b7e44478f
5
5
  SHA512:
6
- metadata.gz: 3aa6b1cbcb9d6310900ddadf151cc53147dafbba951d34cca60996c30319df9c3d73a1f9c1cac2547c5c64c921b45cc14137cb880dad69c8b473d55f46d0b957
7
- data.tar.gz: bddfaf5c090ef9f0552c1e3162ddc150467496aeb4d93103aafa44b71376e633c96687749d6cce3a7bca4a0cafdf38a84af99fddd0b8f2dea673d48b7dba72c7
6
+ metadata.gz: 8e30d01509fe132b2af4ae89138723a6e8f3fd55a9cd212b83d7a4bcac299d1ca46bb28051d039c75eaf57f30217bd518e4e2727629a5c954896811c4f199a97
7
+ data.tar.gz: 023f9de9dc08949e1754ffc1caab86d5ad2d06c9f538577049a658e243a5680ae9fbd04a31a07c64e56d9d7cff8cad1d687a07d18ee2576d75342725901e4963
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ 0.4.0 (December 25, 2014)
2
+
3
+ * Add :total_byte, :current_byte formatters by @vincentjames501
4
+ * Add current= method for updating progress to a given value by @vincentjames501
5
+ * Add ratio= method for updating progress ratio
6
+
1
7
  0.3.0 (December 21, 2014)
2
8
 
3
9
  * Catch INT signal and cleanly end progress
data/README.md CHANGED
@@ -40,9 +40,11 @@ Or install it yourself as:
40
40
 
41
41
  * [1. Usage](#1-usage)
42
42
  * [1.1 advance](#11-advance)
43
- * [1.2 finish](#12-finish)
44
- * [1.3 complete?](#13-complete)
45
- * [1.4 resize](#14-resize)
43
+ * [1.2 current=](#12-current)
44
+ * [1.3 ratio=](#13-ratio)
45
+ * [1.4 finish](#14-finish)
46
+ * [1.5 complete?](#15-complete)
47
+ * [1.6 resize](#16-resize)
46
48
  * [2. Configuration](#2-configuration)
47
49
  * [2.1 Frequency](#21-frequency)
48
50
  * [3. Formatting](#3-formatting)
@@ -85,7 +87,25 @@ bar.advance(-1)
85
87
 
86
88
  Note: If a progress bar has already finished then negative steps will not set it back to desired value.
87
89
 
88
- ### 1.2 finish
90
+ ### 1.2 current=
91
+
92
+ **TTY::ProgressBar** allows you to set progress to a given value by calling `current=` method.
93
+
94
+ ```ruby
95
+ bar.current = 50
96
+ ```
97
+
98
+ Note: If a progress bar has already finished then negative steps will not set it back to desired value.
99
+
100
+ ### 1.3 ratio=
101
+
102
+ In order to update overall completion of a progress bar as an exact percentage use the `ratio=` method. The method accepts values between `0` and `1` inclusive. For example, a ratio of 0.5 will attempt to set the progress bar halfway:
103
+
104
+ ```ruby
105
+ bar.ratio = 0.5
106
+ ```
107
+
108
+ ### 1.4 finish
89
109
 
90
110
  In order to immediately stop and finish the progress call `finish`. This will finish drawing the progress and return to new line.
91
111
 
@@ -93,7 +113,7 @@ In order to immediately stop and finish the progress call `finish`. This will fi
93
113
  bar.finish
94
114
  ```
95
115
 
96
- ### 1.3 complete?
116
+ ### 1.5 complete?
97
117
 
98
118
  During progresion you can check if bar is finished or not by calling `complete?`.
99
119
 
@@ -101,7 +121,7 @@ During progresion you can check if bar is finished or not by calling `complete?`
101
121
  bar.complete? # => false
102
122
  ```
103
123
 
104
- ### 1.4 resize
124
+ ### 1.6 resize
105
125
 
106
126
  If you wish for a progress bar to change it's current width, you can use `resize` by passing in a new desired length:
107
127
 
@@ -155,9 +175,10 @@ Every **TTY::ProgressBar** instance requires a format string, which apart from r
155
175
  These are the tokens that are currently supported:
156
176
 
157
177
  * `:bar` the progress bar
158
- * `:byte` the current progress in bytes
159
178
  * `:current` the current progress number
179
+ * `:current_byte` the current progress in bytes
160
180
  * `:total` the total progress number
181
+ * `:total_byte` the total progress in bytes
161
182
  * `:percent` the completion percentage
162
183
  * `:elapsed` the elapsed time in seconds
163
184
  * `:eta` the esitmated time to completion in seconds
@@ -11,12 +11,13 @@ require 'tty/progressbar/pipeline'
11
11
  require 'tty/progressbar/formatter'
12
12
 
13
13
  require 'tty/progressbar/formatter/bar'
14
- require 'tty/progressbar/formatter/byte'
15
14
  require 'tty/progressbar/formatter/current'
15
+ require 'tty/progressbar/formatter/current_byte'
16
16
  require 'tty/progressbar/formatter/elapsed'
17
17
  require 'tty/progressbar/formatter/estimated'
18
18
  require 'tty/progressbar/formatter/percent'
19
19
  require 'tty/progressbar/formatter/total'
20
+ require 'tty/progressbar/formatter/total_byte'
20
21
 
21
22
  module TTY
22
23
  # Used for creating terminal progress bar
@@ -109,6 +110,29 @@ module TTY
109
110
  render
110
111
  end
111
112
 
113
+ # Advance the progress bar to the updated value
114
+ #
115
+ # @param [Number] value
116
+ # the desired value to updated to
117
+ #
118
+ # @api public
119
+ def current=(value)
120
+ value = [0, [value, total].min].max
121
+ advance(value - @current)
122
+ end
123
+
124
+ # Advance the progress bar to an exact ratio.
125
+ # The target value is set to the closest available value.
126
+ #
127
+ # @param [Float] value
128
+ # the ratio between 0 and 1 inclusive
129
+ #
130
+ # @api public
131
+ def ratio=(value)
132
+ target = (value * total).floor
133
+ advance(target - @current)
134
+ end
135
+
112
136
  # Ratio of completed over total steps
113
137
  #
114
138
  # @return [Float]
@@ -18,6 +18,7 @@ module TTY
18
18
  def load
19
19
  @pipeline.use TTY::ProgressBar::CurrentFormatter
20
20
  @pipeline.use TTY::ProgressBar::TotalFormatter
21
+ @pipeline.use TTY::ProgressBar::TotalByteFormatter
21
22
  @pipeline.use TTY::ProgressBar::ElapsedFormatter
22
23
  @pipeline.use TTY::ProgressBar::EstimatedFormatter
23
24
  @pipeline.use TTY::ProgressBar::PercentFormatter
@@ -6,7 +6,7 @@ module TTY
6
6
  #
7
7
  # @api private
8
8
  class CurrentFormatter
9
- MATCHER = /:current/
9
+ MATCHER = /:current(?!_)/
10
10
 
11
11
  def initialize(progress)
12
12
  @progress = progress
@@ -3,7 +3,7 @@
3
3
  module TTY
4
4
  class ProgressBar
5
5
  class ByteFormatter
6
- MATCHER = /:byte/.freeze
6
+ MATCHER = /:current_byte|:byte/.freeze
7
7
  # Used by {Pipeline} to format :byte token
8
8
  #
9
9
  # @api private
@@ -3,7 +3,7 @@
3
3
  module TTY
4
4
  class ProgressBar
5
5
  class TotalFormatter
6
- MATCHER = /:total/.freeze
6
+ MATCHER = /:total(?!_)/.freeze
7
7
 
8
8
  def initialize(progress, *args, &block)
9
9
  @progress = progress
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+
3
+ module TTY
4
+ class ProgressBar
5
+ # Used by {Pipeline} to format :total_byte token
6
+ #
7
+ # @api private
8
+ class TotalByteFormatter
9
+ MATCHER = /:total_byte/.freeze
10
+
11
+ def initialize(progress, *args, &block)
12
+ @progress = progress
13
+ @converter = Converter.new
14
+ end
15
+
16
+ # Determines whether this formatter is applied or not.
17
+ #
18
+ # @param [Object] value
19
+ #
20
+ # @return [Boolean]
21
+ #
22
+ # @api private
23
+ def matches?(value)
24
+ !!(value.to_s =~ MATCHER)
25
+ end
26
+
27
+ def format(value)
28
+ bytes = @converter.to_bytes(@progress.total)
29
+ value.gsub(MATCHER, bytes)
30
+ end
31
+ end # TotalByteFormatter
32
+ end # ProgressBar
33
+ end # TTY
@@ -2,6 +2,6 @@
2
2
 
3
3
  module TTY
4
4
  class ProgressBar
5
- VERSION = "0.3.0"
5
+ VERSION = "0.4.0"
6
6
  end # ProgressBar
7
7
  end # TTY
@@ -2,11 +2,11 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- RSpec.describe TTY::ProgressBar, '.new' do
5
+ RSpec.describe TTY::ProgressBar, 'current_byte' do
6
6
  let(:output) { StringIO.new('', 'w+') }
7
7
 
8
8
  it "displays bytes processed" do
9
- progress = described_class.new(":byte", output: output, total: 102_400)
9
+ progress = described_class.new(":current_byte", output: output, total: 102_400)
10
10
  5.times { progress.advance(20_480) }
11
11
  output.rewind
12
12
  expect(output.read).to eq([
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- RSpec.describe TTY::ProgressBar, '.new' do
5
+ RSpec.describe TTY::ProgressBar, 'estimated' do
6
6
  let(:output) { StringIO.new('', 'w+') }
7
7
 
8
8
  before { Timecop.safe_mode = false }
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe TTY::ProgressBar, 'total_byte' do
6
+ let(:output) { StringIO.new('', 'w+') }
7
+
8
+ it "displays bytes total" do
9
+ progress = described_class.new(":total_byte", output: output, total: 102_400)
10
+ 5.times { progress.advance(20_480) }
11
+ output.rewind
12
+ expect(output.read).to eq([
13
+ "\e[1G100.00KB",
14
+ "\e[1G100.00KB",
15
+ "\e[1G100.00KB",
16
+ "\e[1G100.00KB",
17
+ "\e[1G100.00KB\n"
18
+ ].join)
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe TTY::ProgressBar, 'total' do
6
+ let(:output) { StringIO.new('', 'w+') }
7
+
8
+ it "displays bytes total" do
9
+ progress = described_class.new(":total", output: output, total: 102_400)
10
+ 5.times { progress.advance(20_480) }
11
+ output.rewind
12
+ expect(output.read).to eq([
13
+ "\e[1G102400",
14
+ "\e[1G102400",
15
+ "\e[1G102400",
16
+ "\e[1G102400",
17
+ "\e[1G102400\n"
18
+ ].join)
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe TTY::ProgressBar, 'ratio=' do
6
+ let(:output) { StringIO.new('', 'w+') }
7
+
8
+ it "allows to set ratio" do
9
+ progress = TTY::ProgressBar.new("[:bar]", output: output, total: 10)
10
+ progress.ratio = 0.7
11
+ expect(progress.current).to eq(7)
12
+ output.rewind
13
+ expect(output.read).to eq([
14
+ "\e[1G[======= ]"
15
+ ].join)
16
+ end
17
+
18
+ it "finds closest available step from the ratio" do
19
+ progress = TTY::ProgressBar.new("[:bar]", output: output, total: 3)
20
+ progress.ratio = 0.5
21
+ expect(progress.current).to eq(1)
22
+ end
23
+ end
@@ -0,0 +1,47 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe TTY::ProgressBar, 'current=' do
6
+ let(:output) { StringIO.new('', 'w+') }
7
+
8
+ it "allows to go back" do
9
+ progress = TTY::ProgressBar.new("[:bar]", output: output, total: 10)
10
+ 3.times { progress.advance }
11
+ progress.current = 5
12
+ expect(progress.current).to eq(5)
13
+ output.rewind
14
+ expect(output.read).to eq([
15
+ "\e[1G[= ]",
16
+ "\e[1G[== ]",
17
+ "\e[1G[=== ]",
18
+ "\e[1G[===== ]"
19
+ ].join)
20
+ progress.current = 0
21
+ expect(progress.current).to eq(0)
22
+ end
23
+
24
+ it "doesn't allow to go over total" do
25
+ progress = TTY::ProgressBar.new("[:bar]", output: output, total: 10)
26
+ progress.current = 12
27
+ expect(progress.current).to eq(10)
28
+ output.rewind
29
+ expect(output.read).to eq("\e[1G[==========]\n")
30
+ end
31
+
32
+ it "doesn't allow to go below 0" do
33
+ progress = TTY::ProgressBar.new("[:bar]", output: output, total: 10)
34
+ progress.current = -1
35
+ expect(progress.current).to eq(0)
36
+ end
37
+
38
+ it "cannot backtrack on finished" do
39
+ progress = TTY::ProgressBar.new("[:bar]", output: output, total: 10)
40
+ progress.current = 10
41
+ expect(progress.current).to eq(10)
42
+ progress.current = 5
43
+ expect(progress.current).to eq(10)
44
+ output.rewind
45
+ expect(output.read).to eq("\e[1G[==========]\n")
46
+ end
47
+ end
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.3.0
4
+ version: 0.4.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: 2014-12-21 00:00:00.000000000 Z
11
+ date: 2014-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-screen
@@ -62,12 +62,13 @@ files:
62
62
  - lib/tty/progressbar/converter.rb
63
63
  - lib/tty/progressbar/formatter.rb
64
64
  - lib/tty/progressbar/formatter/bar.rb
65
- - lib/tty/progressbar/formatter/byte.rb
66
65
  - lib/tty/progressbar/formatter/current.rb
66
+ - lib/tty/progressbar/formatter/current_byte.rb
67
67
  - lib/tty/progressbar/formatter/elapsed.rb
68
68
  - lib/tty/progressbar/formatter/estimated.rb
69
69
  - lib/tty/progressbar/formatter/percent.rb
70
70
  - lib/tty/progressbar/formatter/total.rb
71
+ - lib/tty/progressbar/formatter/total_byte.rb
71
72
  - lib/tty/progressbar/pipeline.rb
72
73
  - lib/tty/progressbar/version.rb
73
74
  - spec/spec_helper.rb
@@ -78,17 +79,21 @@ files:
78
79
  - spec/unit/converter/to_time_spec.rb
79
80
  - spec/unit/custom_formatter_spec.rb
80
81
  - spec/unit/formatter/bar_spec.rb
81
- - spec/unit/formatter/byte_spec.rb
82
+ - spec/unit/formatter/current_byte_spec.rb
82
83
  - spec/unit/formatter/current_spec.rb
83
84
  - spec/unit/formatter/elapsed_spec.rb
84
85
  - spec/unit/formatter/estimated_spec.rb
85
86
  - spec/unit/formatter/percent_spec.rb
87
+ - spec/unit/formatter/total_byte_spec.rb
88
+ - spec/unit/formatter/total_spec.rb
86
89
  - spec/unit/frequency_spec.rb
87
90
  - spec/unit/hide_cursor_spec.rb
88
91
  - spec/unit/log_spec.rb
89
92
  - spec/unit/new_spec.rb
90
93
  - spec/unit/pipeline_spec.rb
94
+ - spec/unit/ratio_spec.rb
91
95
  - spec/unit/resize_spec.rb
96
+ - spec/unit/set_current_spec.rb
92
97
  - spec/unit/width_spec.rb
93
98
  - tasks/console.rake
94
99
  - tasks/coverage.rake
@@ -127,16 +132,20 @@ test_files:
127
132
  - spec/unit/converter/to_time_spec.rb
128
133
  - spec/unit/custom_formatter_spec.rb
129
134
  - spec/unit/formatter/bar_spec.rb
130
- - spec/unit/formatter/byte_spec.rb
135
+ - spec/unit/formatter/current_byte_spec.rb
131
136
  - spec/unit/formatter/current_spec.rb
132
137
  - spec/unit/formatter/elapsed_spec.rb
133
138
  - spec/unit/formatter/estimated_spec.rb
134
139
  - spec/unit/formatter/percent_spec.rb
140
+ - spec/unit/formatter/total_byte_spec.rb
141
+ - spec/unit/formatter/total_spec.rb
135
142
  - spec/unit/frequency_spec.rb
136
143
  - spec/unit/hide_cursor_spec.rb
137
144
  - spec/unit/log_spec.rb
138
145
  - spec/unit/new_spec.rb
139
146
  - spec/unit/pipeline_spec.rb
147
+ - spec/unit/ratio_spec.rb
140
148
  - spec/unit/resize_spec.rb
149
+ - spec/unit/set_current_spec.rb
141
150
  - spec/unit/width_spec.rb
142
151
  has_rdoc: