tty-progressbar 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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: