progressbar 1.11.0 → 1.13.0rc1

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
  SHA256:
3
- metadata.gz: d5bc49bb14e8635e80a71dd8aae8e6e80d42b1eedda7342c4b3ff975487bd119
4
- data.tar.gz: af44f894c1ab7d25ae2ce4a4f150bc565e68669aa8f24220cb91e59eb6cb98ae
3
+ metadata.gz: 600c4958d5a0334a7b8c57e026f018d2fbbb16e5dd03b9abc1a989a36b008466
4
+ data.tar.gz: 895e70eb9b8cc7ca96d86f06e8cc8f6dd36171faa2ea61cd868541b748fdb975
5
5
  SHA512:
6
- metadata.gz: 231ae03f6609373a4dbe57ab1fe4866b03afadc376b6766e00c60c3fde434acc39a69df57f68496d4927285d69437f5573f1a8be608fd2e997e4f9eaa9ee1890
7
- data.tar.gz: 4efaeb90bd8c1d420a39fc73df3c17d1d3745ccf3f0987528eb9f6750b8fe0b06633ae19a3dd9ec634a55883a1f6271710935e7d10744c409fc0c4eb64f414ed
6
+ metadata.gz: cd5be8205221bd7701b32a2174465bab687195e3b764d19c1ccfa1f6a748162eaed3f2259b21f06f8d4a1070c899ef6cfc262f02e6cd7409990b7ac4295fcfe3
7
+ data.tar.gz: e470d4c737a328d6aad8dbb58796408256b63c4d5efd21ef2e730141cd3ce817b6a4c0d14dec4db2165b6f73d02dcf6ee221f54432a7abd226864dd4416fcd75
checksums.yaml.gz.sig CHANGED
@@ -1,5 +1,2 @@
1
- ��z�+d��-�hJ������-(�y��1�hޤ�ƹ �N�Ţ�O@���q��!���:\�����/s�-#;��g]J�F���O��2�v�
2
- ������6y��� �'�y�h�;�w�HI��-AEq��BY�+6@w�@�Rn�\=W
3
- įȏ�`6�(�9xя�
4
- �L���1�N���{�~�J�ѻQ��$J8�Q�ZW�� �?�q��a�����g�p��t
5
- �`�F�?��v��HB7\��~��P#y8X������
6
1
  =4�,��G���SWl�2�*w��|�3�Ho#ܠr����̅���H���T ކ�.�Ǵ��D�;8��yU`�L�볍�����&}{�Ɵ�O��\��.�j��?29��C�:B�FMG���_�tX
2
+ �d��|���Mwc��Cͭ7;?s�$�u7UFA���.�%O��15�@I5�2�M��e�f�O�s���ǀ)ګ��J>�IgnJ�\x�wHmx
3
+ Bu�a)Oq�*E��.g'��t?�KAT,���b����H*����u�;�������ow���V�Z3��{��4���3�|���G�.6Y�����}��x}]B�IVJ�� ���,�P�G�J�D.5?��62��0���|b����%��m�pp;��+�ћ_��ly�xδ��;�������8�ZjC�j��ŞWUwR1󨫟'��8��s�V��l�AA��v,� A@��B3Ǎc����g��pCD:��:y�v^My��"����ɯxg��� �C�����-��S[�p����
data/lib/progressbar.rb CHANGED
@@ -1,15 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ruby-progressbar/output'
4
- require 'ruby-progressbar/outputs/tty'
5
- require 'ruby-progressbar/outputs/non_tty'
6
- require 'ruby-progressbar/timer'
7
- require 'ruby-progressbar/progress'
8
- require 'ruby-progressbar/throttle'
9
- require 'ruby-progressbar/calculators/length'
10
- require 'ruby-progressbar/calculators/running_average'
11
- require 'ruby-progressbar/components'
12
- require 'ruby-progressbar/format'
13
3
  require 'ruby-progressbar/base'
14
4
  require 'ruby-progressbar/refinements' if Module.
15
5
  private_instance_methods.
@@ -1,5 +1,17 @@
1
1
  require 'forwardable'
2
2
 
3
+ require 'ruby-progressbar/components/bar'
4
+ require 'ruby-progressbar/components/percentage'
5
+ require 'ruby-progressbar/components/rate'
6
+ require 'ruby-progressbar/components/time'
7
+ require 'ruby-progressbar/components/title'
8
+ require 'ruby-progressbar/format/formatter'
9
+ require 'ruby-progressbar/format/string'
10
+ require 'ruby-progressbar/outputs/non_tty'
11
+ require 'ruby-progressbar/outputs/tty'
12
+ require 'ruby-progressbar/progress'
13
+ require 'ruby-progressbar/timer'
14
+
3
15
  class ProgressBar
4
16
  class Base
5
17
  extend Forwardable
@@ -21,14 +33,14 @@ class Base
21
33
  self.timer = Timer.new(options)
22
34
  self.progressable = Progress.new(options)
23
35
 
24
- options = options.merge(:timer => timer,
25
- :progress => progressable)
36
+ options = options.merge(:progress => progressable,
37
+ :timer => timer)
26
38
 
27
- self.title_comp = Components::Title.new(options)
28
- self.bar = Components::Bar.new(options)
29
- self.percentage = Components::Percentage.new(options)
30
- self.rate = Components::Rate.new(options)
31
- self.time = Components::Time.new(options)
39
+ self.title_component = Components::Title.new(options)
40
+ self.bar_component = Components::Bar.new(options)
41
+ self.percentage_component = Components::Percentage.new(options)
42
+ self.rate_component = Components::Rate.new(options)
43
+ self.time_component = Components::Time.new(options)
32
44
 
33
45
  self.output = Output.detect(options.merge(:bar => self))
34
46
  @format = Format::String.new(output.resolve_format(options[:format]))
@@ -102,19 +114,19 @@ class Base
102
114
  end
103
115
 
104
116
  def progress_mark=(mark)
105
- output.refresh_with_format_change { bar.progress_mark = mark }
117
+ output.refresh_with_format_change { bar_component.progress_mark = mark }
106
118
  end
107
119
 
108
120
  def remainder_mark=(mark)
109
- output.refresh_with_format_change { bar.remainder_mark = mark }
121
+ output.refresh_with_format_change { bar_component.remainder_mark = mark }
110
122
  end
111
123
 
112
124
  def title
113
- title_comp.title
125
+ title_component.title
114
126
  end
115
127
 
116
128
  def title=(title)
117
- output.refresh_with_format_change { title_comp.title = title }
129
+ output.refresh_with_format_change { title_component.title = title }
118
130
  end
119
131
 
120
132
  def to_s(new_format = nil)
@@ -128,17 +140,17 @@ class Base
128
140
  {
129
141
  'output_stream' => output.__send__(:stream),
130
142
  'length' => output.length,
131
- 'title' => title_comp.title,
132
- 'progress_mark' => bar.progress_mark,
133
- 'remainder_mark' => bar.remainder_mark,
143
+ 'title' => title_component.title,
144
+ 'progress_mark' => bar_component.progress_mark,
145
+ 'remainder_mark' => bar_component.remainder_mark,
134
146
  'progress' => progressable.progress,
135
147
  'total' => progressable.total,
136
148
  'percentage' => progressable.percentage_completed_with_precision.to_f,
137
- 'elapsed_time_in_seconds' => time.__send__(:timer).elapsed_seconds,
138
- 'estimated_time_remaining_in_seconds' => time.__send__(:estimated_seconds_remaining),
139
- 'base_rate_of_change' => rate.__send__(:base_rate),
140
- 'scaled_rate_of_change' => rate.__send__(:scaled_rate),
141
- 'unknown_progress_animation_steps' => bar.upa_steps,
149
+ 'elapsed_time_in_seconds' => time_component.__send__(:timer).elapsed_seconds,
150
+ 'estimated_time_remaining_in_seconds' => time_component.__send__(:estimated_seconds_remaining),
151
+ 'base_rate_of_change' => rate_component.__send__(:base_rate),
152
+ 'scaled_rate_of_change' => rate_component.__send__(:scaled_rate),
153
+ 'unknown_progress_animation_steps' => bar_component.upa_steps,
142
154
  'throttle_rate' => output.__send__(:throttle).rate,
143
155
  'started?' => started?,
144
156
  'stopped?' => stopped?,
@@ -164,11 +176,11 @@ class Base
164
176
  attr_accessor :output,
165
177
  :timer,
166
178
  :progressable,
167
- :title_comp,
168
- :bar,
169
- :percentage,
170
- :rate,
171
- :time,
179
+ :title_component,
180
+ :bar_component,
181
+ :percentage_component,
182
+ :rate_component,
183
+ :time_component,
172
184
  :autostart,
173
185
  :autofinish,
174
186
  :finished
@@ -50,7 +50,6 @@ class Length
50
50
  end
51
51
  # rubocop:enable Style/RescueStandardError
52
52
 
53
- # rubocop:disable Lint/DuplicateMethods
54
53
  begin
55
54
  require 'io/console'
56
55
 
@@ -68,7 +67,6 @@ class Length
68
67
  dynamic_width_via_system_calls
69
68
  end
70
69
  end
71
- # rubocop:enable Lint/DuplicateMethods
72
70
 
73
71
  def dynamic_width_via_output_stream_object
74
72
  _rows, columns = output.winsize
@@ -0,0 +1,9 @@
1
+ class ProgressBar
2
+ module Calculators
3
+ class SmoothedAverage
4
+ def self.calculate(current_average, new_value_to_average, rate)
5
+ (new_value_to_average * (1.0 - rate)) + (current_average * rate)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -32,22 +32,6 @@ class Bar
32
32
  end
33
33
  end
34
34
 
35
- private
36
-
37
- def integrated_percentage_complete_string
38
- return standard_complete_string if completed_length < 5
39
-
40
- " #{progress.percentage_completed} ".to_s.center(completed_length, progress_mark)
41
- end
42
-
43
- def standard_complete_string
44
- progress_mark * completed_length
45
- end
46
-
47
- def incomplete_string
48
- remainder_mark * (length - completed_length)
49
- end
50
-
51
35
  def bar(length)
52
36
  self.length = length
53
37
 
@@ -66,12 +50,6 @@ class Bar
66
50
  to_s(:format => :integrated_percentage)
67
51
  end
68
52
 
69
- def unknown_string
70
- unknown_frame_string = unknown_progress_frame * ((length / upa_steps.size) + 2)
71
-
72
- unknown_frame_string[0, length]
73
- end
74
-
75
53
  def incomplete_space(length)
76
54
  self.length = length
77
55
 
@@ -88,6 +66,28 @@ class Bar
88
66
  integrated_percentage_complete_string
89
67
  end
90
68
 
69
+ private
70
+
71
+ def integrated_percentage_complete_string
72
+ return standard_complete_string if completed_length < 5
73
+
74
+ " #{progress.percentage_completed} ".to_s.center(completed_length, progress_mark)
75
+ end
76
+
77
+ def standard_complete_string
78
+ progress_mark * completed_length
79
+ end
80
+
81
+ def incomplete_string
82
+ remainder_mark * (length - completed_length)
83
+ end
84
+
85
+ def unknown_string
86
+ unknown_frame_string = unknown_progress_frame * ((length / upa_steps.size) + 2)
87
+
88
+ unknown_frame_string[0, length]
89
+ end
90
+
91
91
  def completed_length
92
92
  (length * progress.percentage_completed / 100).floor
93
93
  end
@@ -7,10 +7,8 @@ class Percentage
7
7
  self.progress = options[:progress]
8
8
  end
9
9
 
10
- private
11
-
12
10
  def percentage
13
- progress.percentage_completed
11
+ progress.percentage_completed.to_s
14
12
  end
15
13
 
16
14
  def justified_percentage
@@ -2,23 +2,17 @@ class ProgressBar
2
2
  module Components
3
3
  class Rate
4
4
  attr_accessor :rate_scale,
5
- :started_at,
6
- :stopped_at,
7
5
  :timer,
8
6
  :progress
9
7
 
10
8
  def initialize(options = {})
11
9
  self.rate_scale = options[:rate_scale] || lambda { |x| x }
12
- self.started_at = nil
13
- self.stopped_at = nil
14
10
  self.timer = options[:timer]
15
11
  self.progress = options[:progress]
16
12
  end
17
13
 
18
- private
19
-
20
14
  def rate_of_change(format_string = '%i')
21
- return 0 unless elapsed_seconds > 0
15
+ return '0' if elapsed_seconds <= 0
22
16
 
23
17
  format_string % scaled_rate
24
18
  end
@@ -27,6 +21,8 @@ class Rate
27
21
  rate_of_change('%.2f')
28
22
  end
29
23
 
24
+ private
25
+
30
26
  def scaled_rate
31
27
  rate_scale.call(base_rate)
32
28
  end
@@ -12,60 +12,56 @@ class Time
12
12
  NO_TIME_ELAPSED_TEXT = '--:--:--'.freeze
13
13
  ESTIMATED_LABEL = ' ETA'.freeze
14
14
  ELAPSED_LABEL = 'Time'.freeze
15
+ WALL_CLOCK_FORMAT = '%H:%M:%S'.freeze
15
16
  OOB_TEXT_TO_FORMAT = {
16
17
  :unknown => OOB_UNKNOWN_TIME_TEXT,
17
18
  :friendly => OOB_FRIENDLY_TIME_TEXT
18
19
  }.freeze
19
20
 
20
21
  def initialize(options = {})
21
- self.out_of_bounds_time_format = options[:out_of_bounds_time_format]
22
- self.timer = options[:timer]
23
- self.progress = options[:progress]
22
+ self.timer = options[:timer]
23
+ self.progress = options[:progress]
24
24
  end
25
25
 
26
- def estimated_with_label
27
- "#{ESTIMATED_LABEL}: #{estimated}"
26
+ def estimated_with_label(out_of_bounds_time_format = nil)
27
+ "#{ESTIMATED_LABEL}: #{estimated(out_of_bounds_time_format)}"
28
28
  end
29
29
 
30
30
  def elapsed_with_label
31
31
  "#{ELAPSED_LABEL}: #{elapsed}"
32
32
  end
33
33
 
34
- protected
35
-
36
34
  def estimated_with_no_oob
37
- self.out_of_bounds_time_format = nil
38
-
39
- estimated_with_elapsed_fallback
35
+ estimated_with_elapsed_fallback(nil)
40
36
  end
41
37
 
42
38
  def estimated_with_unknown_oob
43
- self.out_of_bounds_time_format = :unknown
44
-
45
- estimated_with_elapsed_fallback
39
+ estimated_with_elapsed_fallback(:unknown)
46
40
  end
47
41
 
48
42
  def estimated_with_friendly_oob
49
- self.out_of_bounds_time_format = :friendly
50
-
51
- estimated_with_elapsed_fallback
43
+ estimated_with_elapsed_fallback(:friendly)
52
44
  end
53
45
 
54
- attr_reader :out_of_bounds_time_format
55
- attr_accessor :timer,
56
- :progress
46
+ def estimated_wall_clock
47
+ return timer.stopped_at.strftime(WALL_CLOCK_FORMAT) if progress.finished?
48
+ return NO_TIME_ELAPSED_TEXT unless timer.started?
57
49
 
58
- def out_of_bounds_time_format=(format)
59
- unless OOB_TIME_FORMATS.include? format
60
- fail StandardError, "Invalid Out Of Bounds time format. Valid formats are #{OOB_TIME_FORMATS.inspect}"
61
- end
50
+ memo_estimated_seconds_remaining = estimated_seconds_remaining
51
+ return NO_TIME_ELAPSED_TEXT unless memo_estimated_seconds_remaining
62
52
 
63
- @out_of_bounds_time_format = format
53
+ (timer.now + memo_estimated_seconds_remaining).
54
+ strftime(WALL_CLOCK_FORMAT)
64
55
  end
65
56
 
57
+ protected
58
+
59
+ attr_accessor :timer,
60
+ :progress
61
+
66
62
  private
67
63
 
68
- def estimated
64
+ def estimated(out_of_bounds_time_format)
69
65
  memo_estimated_seconds_remaining = estimated_seconds_remaining
70
66
 
71
67
  return OOB_UNKNOWN_TIME_TEXT unless memo_estimated_seconds_remaining
@@ -73,7 +69,7 @@ class Time
73
69
  hours, minutes, seconds = timer.divide_seconds(memo_estimated_seconds_remaining)
74
70
 
75
71
  if hours > OOB_LIMIT_IN_HOURS && out_of_bounds_time_format
76
- OOB_TEXT_TO_FORMAT[out_of_bounds_time_format]
72
+ OOB_TEXT_TO_FORMAT.fetch(out_of_bounds_time_format)
77
73
  else
78
74
  TIME_FORMAT % [hours, minutes, seconds]
79
75
  end
@@ -87,14 +83,16 @@ class Time
87
83
  TIME_FORMAT % [hours, minutes, seconds]
88
84
  end
89
85
 
90
- def estimated_with_elapsed_fallback
91
- progress.finished? ? elapsed_with_label : estimated_with_label
86
+ def estimated_with_elapsed_fallback(out_of_bounds_time_format)
87
+ return elapsed_with_label if progress.finished?
88
+
89
+ estimated_with_label(out_of_bounds_time_format)
92
90
  end
93
91
 
94
92
  def estimated_seconds_remaining
95
93
  return if progress.unknown? || progress.none? || timer.stopped? || timer.reset?
96
94
 
97
- (timer.elapsed_seconds * (progress.total / progress.running_average - 1)).round
95
+ (timer.elapsed_seconds * ((progress.total / progress.running_average) - 1)).round
98
96
  end
99
97
  end
100
98
  end
@@ -13,7 +13,7 @@ class Formatter
13
13
  bar_length = max_length -
14
14
  processed_string.displayable_length +
15
15
  format_string.bar_molecule_placeholder_length
16
- bar_length = (bar_length < 0) ? 0 : bar_length
16
+ bar_length = 0 if bar_length < 0
17
17
 
18
18
  format_string.bar_molecules.each do |molecule|
19
19
  processed_string.gsub!(molecule.full_key,
@@ -2,26 +2,27 @@ class ProgressBar
2
2
  module Format
3
3
  class Molecule
4
4
  MOLECULES = {
5
- :t => [:title_comp, :title],
6
- :T => [:title_comp, :title],
7
- :c => [:progressable, :progress],
8
- :C => [:progressable, :total],
9
- :u => [:progressable, :total_with_unknown_indicator],
10
- :p => [:percentage, :percentage],
11
- :P => [:percentage, :percentage_with_precision],
12
- :j => [:percentage, :justified_percentage],
13
- :J => [:percentage, :justified_percentage_with_precision],
14
- :a => [:time, :elapsed_with_label],
15
- :e => [:time, :estimated_with_unknown_oob],
16
- :E => [:time, :estimated_with_friendly_oob],
17
- :f => [:time, :estimated_with_no_oob],
18
- :B => [:bar, :complete_bar],
19
- :b => [:bar, :bar],
20
- :W => [:bar, :complete_bar_with_percentage],
21
- :w => [:bar, :bar_with_percentage],
22
- :i => [:bar, :incomplete_space],
23
- :r => [:rate, :rate_of_change],
24
- :R => [:rate, :rate_of_change_with_precision]
5
+ :t => [:title_component, :title],
6
+ :T => [:title_component, :title],
7
+ :c => [:progressable, :progress],
8
+ :C => [:progressable, :total],
9
+ :u => [:progressable, :total_with_unknown_indicator],
10
+ :p => [:percentage_component, :percentage],
11
+ :P => [:percentage_component, :percentage_with_precision],
12
+ :j => [:percentage_component, :justified_percentage],
13
+ :J => [:percentage_component, :justified_percentage_with_precision],
14
+ :a => [:time_component, :elapsed_with_label],
15
+ :e => [:time_component, :estimated_with_unknown_oob],
16
+ :E => [:time_component, :estimated_with_friendly_oob],
17
+ :f => [:time_component, :estimated_with_no_oob],
18
+ :l => [:time_component, :estimated_wall_clock],
19
+ :B => [:bar_component, :complete_bar],
20
+ :b => [:bar_component, :bar],
21
+ :W => [:bar_component, :complete_bar_with_percentage],
22
+ :w => [:bar_component, :bar_with_percentage],
23
+ :i => [:bar_component, :incomplete_space],
24
+ :r => [:rate_component, :rate_of_change],
25
+ :R => [:rate_component, :rate_of_change_with_precision]
25
26
  }.freeze
26
27
 
27
28
  BAR_MOLECULES = %w{W w B b i}.freeze
@@ -1,3 +1,5 @@
1
+ require 'ruby-progressbar/format/molecule'
2
+
1
3
  class ProgressBar
2
4
  module Format
3
5
  class String < ::String
@@ -1,3 +1,6 @@
1
+ require 'ruby-progressbar/calculators/length'
2
+ require 'ruby-progressbar/throttle'
3
+
1
4
  class ProgressBar
2
5
  class Output
3
6
  DEFAULT_OUTPUT_STREAM = $stdout
@@ -1,21 +1,33 @@
1
1
  require 'ruby-progressbar/errors/invalid_progress_error'
2
+ require 'ruby-progressbar/calculators/smoothed_average'
2
3
 
3
4
  class ProgressBar
4
5
  class Progress
5
- DEFAULT_TOTAL = 100
6
- DEFAULT_BEGINNING_POSITION = 0
7
- DEFAULT_SMOOTHING = 0.1
6
+ DEFAULT_TOTAL = 100
7
+ DEFAULT_BEGINNING_POSITION = 0
8
+ DEFAULT_RUNNING_AVERAGE_RATE = 0.1
9
+ DEFAULT_RUNNING_AVERAGE_CALCULATOR = ProgressBar::Calculators::SmoothedAverage
10
+
11
+ RUNNING_AVERAGE_CALCULATOR_MAP = {
12
+ 'smoothing' => ProgressBar::Calculators::SmoothedAverage
13
+ }.freeze
8
14
 
9
15
  attr_reader :total,
10
16
  :progress
11
17
 
12
18
  attr_accessor :starting_position,
13
19
  :running_average,
14
- :smoothing
20
+ :running_average_calculator,
21
+ :running_average_rate
15
22
 
16
23
  def initialize(options = {})
17
- self.total = options.fetch(:total, DEFAULT_TOTAL)
18
- self.smoothing = options[:smoothing] || DEFAULT_SMOOTHING
24
+ self.total = options.fetch(:total, DEFAULT_TOTAL)
25
+ self.running_average_rate = options[:smoothing] ||
26
+ options[:running_average_rate] ||
27
+ DEFAULT_RUNNING_AVERAGE_RATE
28
+ self.running_average_calculator = RUNNING_AVERAGE_CALCULATOR_MAP.
29
+ fetch(options[:running_average_calculator],
30
+ DEFAULT_RUNNING_AVERAGE_CALCULATOR)
19
31
 
20
32
  start :at => DEFAULT_BEGINNING_POSITION
21
33
  end
@@ -66,9 +78,9 @@ class Progress
66
78
 
67
79
  @progress = new_progress
68
80
 
69
- self.running_average = Calculators::RunningAverage.calculate(running_average,
70
- absolute,
71
- smoothing)
81
+ self.running_average = running_average_calculator.calculate(running_average,
82
+ absolute,
83
+ running_average_rate)
72
84
  end
73
85
 
74
86
  def total=(new_total)
@@ -0,0 +1,28 @@
1
+ class ProgressBar
2
+ module Refinements
3
+ module Enumerator
4
+ ARITY_ERROR_MESSAGE = 'Only two arguments allowed to be passed to ' \
5
+ 'with_progressbar (item, progress_bar)'.freeze
6
+
7
+ refine ::Enumerator do
8
+ def with_progressbar(options = {}, &block)
9
+ progress_bar = ProgressBar.create(options.merge(:starting_at => 0, :total => size))
10
+
11
+ each do |item|
12
+ progress_bar.increment
13
+
14
+ next unless block
15
+
16
+ yielded_args = []
17
+ yielded_args << item if block.arity > 0
18
+ yielded_args << progress_bar if block.arity > 1
19
+
20
+ fail ::ArgumentError, ARITY_ERROR_MESSAGE if block.arity > 2
21
+
22
+ yield(*yielded_args)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1 +1 @@
1
- require 'ruby-progressbar/refinements/enumerator'
1
+ require 'ruby-progressbar/refinements/progress_enumerator'
@@ -17,11 +17,9 @@ class Time
17
17
  end
18
18
 
19
19
  def unmocked_time_method
20
- @unmocked_time_method ||= begin
21
- TIME_MOCKING_LIBRARY_METHODS.find do |method|
22
- time.respond_to? method
23
- end
24
- end
20
+ @unmocked_time_method ||= TIME_MOCKING_LIBRARY_METHODS.find do |method|
21
+ time.respond_to? method
22
+ end
25
23
  end
26
24
 
27
25
  protected
@@ -28,6 +28,10 @@ class Timer
28
28
  start
29
29
  end
30
30
 
31
+ def now
32
+ time.now
33
+ end
34
+
31
35
  def started?
32
36
  started_at
33
37
  end
@@ -51,6 +55,8 @@ class Timer
51
55
  end
52
56
 
53
57
  def elapsed_seconds
58
+ return 0 unless started?
59
+
54
60
  ((stopped_at || time.now) - started_at)
55
61
  end
56
62
 
@@ -1,3 +1,3 @@
1
1
  class ProgressBar
2
- VERSION = '1.11.0'.freeze
2
+ VERSION = '1.13.0rc1'.freeze
3
3
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: progressbar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 1.13.0rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - thekompanee
8
8
  - jfelchner
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- MIIEGDCCAoCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAyMTAwLgYDVQQDDCdhY2Nv
15
- dW50c19ydWJ5Z2Vtcy9EQz10aGVrb21wYW5lZS9EQz1jb20wHhcNMjAxMjI2MjIz
16
- MTE2WhcNMjExMjI2MjIzMTE2WjAyMTAwLgYDVQQDDCdhY2NvdW50c19ydWJ5Z2Vt
14
+ MIIEdjCCAt6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAyMTAwLgYDVQQDDCdhY2Nv
15
+ dW50c19ydWJ5Z2Vtcy9EQz10aGVrb21wYW5lZS9EQz1jb20wHhcNMjMwMjI2MTcx
16
+ MDI1WhcNMjYwMjI1MTcxMDI1WjAyMTAwLgYDVQQDDCdhY2NvdW50c19ydWJ5Z2Vt
17
17
  cy9EQz10aGVrb21wYW5lZS9EQz1jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAw
18
18
  ggGKAoIBgQCqhYn5ODEoLvuBIF2M1GzoaZU28+ntP5QApvDE0Te04n0JbBC1cNYH
19
19
  mr71neeSx7tlZ9w9kJ/8GNcY5bm7pNJqhyhfc+uG9M7FttcxM8AYXogjcdUDP234
@@ -23,18 +23,20 @@ cert_chain:
23
23
  ztMEU785tERbOSszZrz9rBS/+GnMxlD0pxy50zFfHX3jY1hwnwGjE8Gg+0iYr/tm
24
24
  eysjhcbZfKrMynoqAioCSwstIwtYYYYpYzCPZzwaIBaBqQmUTkuMeiGbAdOdFOrR
25
25
  lOgl5jxCYbNOOTaXbm0nGBFaTucB88+JLbsNAuoNGUf/ybDcZ1zKRkMr2vtb+OtL
26
- GoP81fN6l88CAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
27
- BBYEFC+HleDjPYe35DNu6n/aeK2oB4ugMA0GCSqGSIb3DQEBCwUAA4IBgQCbuxKj
28
- ZyvFu5mUDEWCf1dT5mqFSyFznVCjQAQygDnz6JkCQlIG93IDtVLEmHrx7hm3dOYt
29
- HgPlsSgkoYIgsLYsR9ZIKjA2O5m3QUbo9uOtF4iRi0Obni8fVv7VZVebRfA7ypCo
30
- n625lDRIzc/zGVcI37bzIlDXC0aK3oaBVFmN1Uj5LNMW62hTDdMBx4HcUKI45R3g
31
- clUG96OBIyrYky3j6zpy6EpBaEdRWR68Yn4Tdba7xE9WzP3DCInjX3KPx+f0PPVK
32
- HzsXX6TlwXk2P9DwOTZRjz7vAmvTgZGWjlfq3dgQJBgjB+UKQVHxKEGUC/comr7c
33
- vPnXgn+nF38pK/hp/O9/lTpNplKrUvOB9+6nkwbxCPTQQO8In3pC6ixUzr/6wx9R
34
- URbz4/Czf5LMUmzqDni0GvBkXElaXzaIRoPM/T7b1LrRsZO3DwGFAasSrR27+ZgU
35
- Sv+7zM1SqVOK2Vhp99UBBVIZTHSJWh4sCU7dJrUJTqvwwS3ayTiUlIi5TdQ=
26
+ GoP81fN6l88CAwEAAaOBljCBkzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
27
+ HQ4EFgQUL4eV4OM9h7fkM27qf9p4ragHi6AwLAYDVR0RBCUwI4EhYWNjb3VudHMr
28
+ cnVieWdlbXNAdGhla29tcGFuZWUuY29tMCwGA1UdEgQlMCOBIWFjY291bnRzK3J1
29
+ YnlnZW1zQHRoZWtvbXBhbmVlLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAD/tBN1cM
30
+ 8Qu6u+rPM3SEtlEK/ZdVY0IowXtXMskkderNBJ4HY+xBfIWyAXLTr3Fy6xscVZ95
31
+ raFCiWHqvR577u3/BsVZ5BoQ0g25oY2bwoamQSdx71ygs25Q+UFbg6lHq6olszj0
32
+ HqKXUy/iPFb+OzGq7NOtKOD5pHl3ew8H7U5tfh0kx6B5TdL9BZLurjskW0n2G+kY
33
+ NSGCTGYU8wY4Bsk/AmfoFT/ATwmrf68CTD+IBY5yvt2DGvcyuSrX1RQP8Vk//0EP
34
+ J2ezTNGIBeQFcyyo09gMfy1yxv9XAvwmy6pAx7/m/F2XzTiXuzmJ7zJ6J0OaHUG4
35
+ svJgf3o9Eor2okQND60Qdpdl4qdSy3KaNqvQQbTRB96e/+K8ksz4rras5jPaAs0p
36
+ DV37k4cni6c/jUm2CqepsJ/dbzeWdkhcuO6hwEQV0jvFky5C6d5hHcrbJwxl1sTL
37
+ V+pWW6L9MSZzKkjWVJXD43B3tWBjIDthQVTzS4j90PUkUXgBXjS7Jxj/
36
38
  -----END CERTIFICATE-----
37
- date: 2020-12-31 00:00:00.000000000 Z
39
+ date: 2023-03-01 00:00:00.000000000 Z
38
40
  dependencies:
39
41
  - !ruby/object:Gem::Dependency
40
42
  name: rspec
@@ -82,16 +84,16 @@ dependencies:
82
84
  name: timecop
83
85
  requirement: !ruby/object:Gem::Requirement
84
86
  requirements:
85
- - - '='
87
+ - - "~>"
86
88
  - !ruby/object:Gem::Version
87
- version: 0.6.0
89
+ version: '0.9'
88
90
  type: :development
89
91
  prerelease: false
90
92
  version_requirements: !ruby/object:Gem::Requirement
91
93
  requirements:
92
- - - '='
94
+ - - "~>"
93
95
  - !ruby/object:Gem::Version
94
- version: 0.6.0
96
+ version: '0.9'
95
97
  description: 'Ruby/ProgressBar is an extremely flexible text progress bar library
96
98
  for Ruby. The output can be customized with a flexible formatting system including:
97
99
  percentage, bars of various formats, elapsed time and estimated time remaining.'
@@ -107,15 +109,13 @@ files:
107
109
  - lib/progressbar.rb
108
110
  - lib/ruby-progressbar/base.rb
109
111
  - lib/ruby-progressbar/calculators/length.rb
110
- - lib/ruby-progressbar/calculators/running_average.rb
111
- - lib/ruby-progressbar/components.rb
112
+ - lib/ruby-progressbar/calculators/smoothed_average.rb
112
113
  - lib/ruby-progressbar/components/bar.rb
113
114
  - lib/ruby-progressbar/components/percentage.rb
114
115
  - lib/ruby-progressbar/components/rate.rb
115
116
  - lib/ruby-progressbar/components/time.rb
116
117
  - lib/ruby-progressbar/components/title.rb
117
118
  - lib/ruby-progressbar/errors/invalid_progress_error.rb
118
- - lib/ruby-progressbar/format.rb
119
119
  - lib/ruby-progressbar/format/formatter.rb
120
120
  - lib/ruby-progressbar/format/molecule.rb
121
121
  - lib/ruby-progressbar/format/string.rb
@@ -125,7 +125,7 @@ files:
125
125
  - lib/ruby-progressbar/outputs/tty.rb
126
126
  - lib/ruby-progressbar/progress.rb
127
127
  - lib/ruby-progressbar/refinements.rb
128
- - lib/ruby-progressbar/refinements/enumerator.rb
128
+ - lib/ruby-progressbar/refinements/progress_enumerator.rb
129
129
  - lib/ruby-progressbar/throttle.rb
130
130
  - lib/ruby-progressbar/time.rb
131
131
  - lib/ruby-progressbar/timer.rb
@@ -136,11 +136,11 @@ licenses:
136
136
  metadata:
137
137
  bug_tracker_uri: https://github.com/jfelchner/ruby-progressbar/issues
138
138
  changelog_uri: https://github.com/jfelchner/ruby-progressbar/blob/master/CHANGELOG.md
139
- documentation_uri: https://github.com/jfelchner/ruby-progressbar/tree/releases/v1.11.0
139
+ documentation_uri: https://github.com/jfelchner/ruby-progressbar/tree/releases/v1.13.0rc1
140
140
  homepage_uri: https://github.com/jfelchner/ruby-progressbar
141
141
  source_code_uri: https://github.com/jfelchner/ruby-progressbar
142
142
  wiki_uri: https://github.com/jfelchner/ruby-progressbar/wiki
143
- post_install_message:
143
+ post_install_message:
144
144
  rdoc_options: []
145
145
  require_paths:
146
146
  - lib
@@ -151,12 +151,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
151
  version: '0'
152
152
  required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  requirements:
154
- - - ">="
154
+ - - ">"
155
155
  - !ruby/object:Gem::Version
156
- version: '0'
156
+ version: 1.3.1
157
157
  requirements: []
158
- rubygems_version: 3.2.3
159
- signing_key:
158
+ rubygems_version: 3.1.6
159
+ signing_key:
160
160
  specification_version: 4
161
161
  summary: Ruby/ProgressBar is a flexible text progress bar library for Ruby.
162
162
  test_files: []
metadata.gz.sig CHANGED
Binary file
@@ -1,9 +0,0 @@
1
- class ProgressBar
2
- module Calculators
3
- class RunningAverage
4
- def self.calculate(current_average, new_value_to_average, smoothing_factor)
5
- new_value_to_average * (1.0 - smoothing_factor) + current_average * smoothing_factor
6
- end
7
- end
8
- end
9
- end
@@ -1,5 +0,0 @@
1
- require 'ruby-progressbar/components/bar'
2
- require 'ruby-progressbar/components/percentage'
3
- require 'ruby-progressbar/components/rate'
4
- require 'ruby-progressbar/components/time'
5
- require 'ruby-progressbar/components/title'
@@ -1,3 +0,0 @@
1
- require 'ruby-progressbar/format/molecule'
2
- require 'ruby-progressbar/format/formatter'
3
- require 'ruby-progressbar/format/string'
@@ -1,23 +0,0 @@
1
- class ProgressBar
2
- module Refinements
3
- module Enumerator
4
- refine ::Enumerator do
5
- def with_progressbar(options = {}, &block)
6
- chain = ::Enumerator.new do |yielder|
7
- progress_bar = ProgressBar.create(options.merge(:starting_at => 0, :total => size))
8
-
9
- each do |*args|
10
- yielder.yield(*args).tap do
11
- progress_bar.increment
12
- end
13
- end
14
- end
15
-
16
- return chain unless block
17
-
18
- chain.each(&block)
19
- end
20
- end
21
- end
22
- end
23
- end