progress 3.5.2 → 3.6.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
  SHA256:
3
- metadata.gz: 968512bbd9522d70ff093587d4ec2f75a82b8cfe3af204bbec0ccf461474ffa4
4
- data.tar.gz: df95743ec5de95729873bc5afa3ffd7e507bd4f515b0918287cf69d1a3b70c07
3
+ metadata.gz: cdce3b680bc7e08cda708708d4058f6cddd399469463d57adfeb576ce7436bd7
4
+ data.tar.gz: 699601431481e0159b0f48102a879e3bb8e47f473bedd25478002cbc55856225
5
5
  SHA512:
6
- metadata.gz: 7767fac01705f63d745a64aa352aa9ce4afa998d33874967ddf397c912629f3b0a2b288bdab80c97123ff90be7432e43053301a643da47e2ab88d17359d16ad0
7
- data.tar.gz: 8c1b6a5e2be195328dc59c15b5d9acdd3ed9bd93d76ca4c60301d9a33857174b45a8e78aa0c9b2e5a688fad0577f133a821fffac818bd00e71184d463495b8b7
6
+ metadata.gz: 84757caa1fa6d3e7e6f4a1e78d086d3494ae991021178fdbd454b05ed81b16b3ef6439719e9e3b6c37549c9fb9bc3f6420232b2fcb5f68f684d5655c1245bd4b
7
+ data.tar.gz: e1f40e3b1a84f4f8cea4e29ba798f136ed72e5b7a2e978dde51c86fd0c28cbcf4c695557b8920649948d0b6c6d5299eccde2c6b83e59fbfb7d51600b76d88651
data/.rubocop.yml CHANGED
@@ -1,6 +1,8 @@
1
1
  AllCops:
2
2
  Exclude:
3
3
  - '*.gemspec'
4
+ NewCops: enable
5
+ TargetRubyVersion: 2.4
4
6
 
5
7
  Layout/AccessModifierIndentation:
6
8
  EnforcedStyle: outdent
@@ -14,7 +16,7 @@ Layout/DotPosition:
14
16
  Layout/EndAlignment:
15
17
  EnforcedStyleAlignWith: variable
16
18
 
17
- Layout/IndentFirstHashElement:
19
+ Layout/FirstHashElementIndentation:
18
20
  EnforcedStyle: consistent
19
21
 
20
22
  Layout/SpaceBeforeBlockBraces:
@@ -24,7 +26,7 @@ Layout/SpaceBeforeBlockBraces:
24
26
  Layout/SpaceInsideHashLiteralBraces:
25
27
  EnforcedStyle: no_space
26
28
 
27
- Lint/UnneededRequireStatement:
29
+ Lint/RedundantRequireStatement:
28
30
  Enabled: false
29
31
 
30
32
  Metrics/AbcSize:
@@ -47,14 +49,14 @@ Metrics/ModuleLength:
47
49
  Max: 200
48
50
 
49
51
  Metrics/PerceivedComplexity:
50
- Max: 10
52
+ Max: 11
53
+
54
+ Style/AccessorGrouping:
55
+ Enabled: false
51
56
 
52
57
  Style/Alias:
53
58
  EnforcedStyle: prefer_alias_method
54
59
 
55
- Style/BracesAroundHashParameters:
56
- Enabled: false
57
-
58
60
  Style/DoubleNegation:
59
61
  Enabled: false
60
62
 
@@ -64,12 +66,27 @@ Style/EmptyCaseCondition:
64
66
  Style/Encoding:
65
67
  Enabled: false
66
68
 
69
+ Style/FormatStringToken:
70
+ Enabled: false
71
+
72
+ Style/HashEachMethods:
73
+ Enabled: true
74
+
75
+ Style/HashTransformKeys:
76
+ Enabled: false
77
+
78
+ Style/HashTransformValues:
79
+ Enabled: false
80
+
67
81
  Style/IfUnlessModifier:
68
82
  Enabled: false
69
83
 
70
84
  Style/NumericPredicate:
71
85
  Enabled: false
72
86
 
87
+ Style/OptionalBooleanParameter:
88
+ Enabled: false
89
+
73
90
  Style/ParallelAssignment:
74
91
  Enabled: false
75
92
 
data/.travis.yml CHANGED
@@ -1,5 +1,4 @@
1
- sudo: false
2
- dist: trusty
1
+ dist: xenial
3
2
  language: ruby
4
3
  before_install:
5
4
  - gem install bundler || gem install bundler --version '< 2'
@@ -9,16 +8,19 @@ rvm:
9
8
  - '2.1.10'
10
9
  - '2.2.10'
11
10
  - '2.3.8'
12
- - '2.4.6'
13
- - '2.5.5'
14
- - '2.6.3'
15
- - 'jruby-9.1.9.0'
11
+ - '2.4.10'
12
+ - '2.5.8'
13
+ - '2.6.6'
14
+ - '2.7.2'
15
+ - '3.0.0'
16
+ - 'jruby-9.1.17.0'
17
+ - 'jruby-9.2.14.0'
16
18
  script: bundle exec rspec
17
19
  matrix:
18
20
  include:
19
- - env: RUBOCOP=✓
20
- rvm: '2.4.6'
21
+ - env: RUBOCOP=1
22
+ rvm: '2.4.10'
21
23
  script: bundle exec rubocop
22
- - env: CHECK_RUBIES=✓
23
- rvm: '2.4.6'
24
+ - env: CHECK_RUBIES=1
25
+ rvm: '2.4.10'
24
26
  script: bundle exec travis_check_rubies
data/CHANGELOG.markdown CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## unreleased
4
4
 
5
+ ## v3.6.0 (2021-04-02)
6
+
7
+ * Use `Process.clock_gettime` instead of `Time.now` which is faster and should give proper estimates even if sleeping in the middle [#13](https://github.com/toy/progress/issues/13) [@toy](https://github.com/toy)
8
+
5
9
  ## v3.5.2 (2019-07-14)
6
10
 
7
11
  * Remove deprecated `rubyforge_project` attribute from gemspec [rubygems/rubygems#2436](https://github.com/rubygems/rubygems/pull/2436) [@toy](https://github.com/toy)
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008-2019 Ivan Kuchin
1
+ Copyright (c) 2008-2021 Ivan Kuchin
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.markdown CHANGED
@@ -163,4 +163,4 @@ end
163
163
 
164
164
  ## Copyright
165
165
 
166
- Copyright (c) 2008-2019 Ivan Kuchin. See LICENSE.txt for details.
166
+ Copyright (c) 2008-2021 Ivan Kuchin. See LICENSE.txt for details.
data/lib/progress.rb CHANGED
@@ -52,6 +52,7 @@ class Progress
52
52
  attr_reader :current
53
53
  attr_reader :title
54
54
  attr_accessor :note
55
+
55
56
  def initialize(total, title)
56
57
  if !total.is_a?(Numeric) && (title.nil? || title.is_a?(Numeric))
57
58
  total, title = title, total
@@ -1,6 +1,8 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
3
 
4
+ require 'progress/elapsed_time'
5
+
4
6
  class Progress
5
7
  # Class methods of Progress
6
8
  module ClassMethods
@@ -165,14 +167,14 @@ class Progress
165
167
  end
166
168
 
167
169
  def time_to_print?
168
- !@next_time_to_print || @next_time_to_print <= Time.now
170
+ !@next_time_to_print || @next_time_to_print <= ElapsedTime.now
169
171
  end
170
172
 
171
173
  def print_message(options = {})
172
174
  force = options[:force]
173
175
  lock force do
174
176
  if force || time_to_print?
175
- @next_time_to_print = Time.now + 0.3
177
+ @next_time_to_print = ElapsedTime.now + 0.3
176
178
  restart_beeper
177
179
  io << message_for_output(options)
178
180
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Progress
4
+ # Use Process.clock_gettime if available to get time more fitting to calculate elapsed time
5
+ module ElapsedTime
6
+ CLOCK_NAME = %w[
7
+ CLOCK_UPTIME_RAW
8
+ CLOCK_UPTIME
9
+ CLOCK_MONOTONIC_RAW
10
+ CLOCK_MONOTONIC
11
+ CLOCK_REALTIME
12
+ ].find{ |name| Process.const_defined?(name) }
13
+
14
+ CLOCK_ID = CLOCK_NAME && Process.const_get(CLOCK_NAME)
15
+
16
+ module_function
17
+
18
+ def now
19
+ if CLOCK_ID
20
+ Process.clock_gettime(CLOCK_ID)
21
+ else
22
+ Time.now.to_f
23
+ end
24
+ end
25
+ end
26
+ end
data/lib/progress/eta.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'progress/elapsed_time'
4
+
3
5
  class Progress
4
6
  # Estimate time of arrival
5
7
  class Eta
6
8
  def initialize
7
- @started_at = Time.now
9
+ @started_at = ElapsedTime.now
8
10
  end
9
11
 
10
12
  def left(completed)
@@ -15,7 +17,7 @@ class Progress
15
17
  end
16
18
 
17
19
  def elapsed
18
- seconds_to_string(Time.now - @started_at)
20
+ seconds_to_string(ElapsedTime.now - @started_at)
19
21
  end
20
22
 
21
23
  private
@@ -36,7 +38,7 @@ class Progress
36
38
  end
37
39
 
38
40
  def seconds_left(completed)
39
- now = Time.now
41
+ now = ElapsedTime.now
40
42
  return unless completed > 0 && now - @started_at >= 1
41
43
 
42
44
  current_eta = @started_at + (now - @started_at) / completed
@@ -4,7 +4,7 @@ require 'progress'
4
4
 
5
5
  # Add Progress method as alias to Progress.start
6
6
  module Kernel
7
- private # rubocop:disable Layout/IndentationWidth
7
+ private
8
8
 
9
9
  define_method :Progress do |*args, &block|
10
10
  Progress.start(*args, &block)
data/progress.gemspec CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'progress'
5
- s.version = '3.5.2'
5
+ s.version = '3.6.0'
6
6
  s.summary = %q{Show progress of long running tasks}
7
- s.homepage = "http://github.com/toy/#{s.name}"
7
+ s.homepage = "https://github.com/toy/#{s.name}"
8
8
  s.authors = ['Ivan Kuchin']
9
9
  s.license = 'MIT'
10
10
 
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
  s.require_paths = %w[lib]
24
24
 
25
25
  s.add_development_dependency 'rspec', '~> 3.0'
26
- if RUBY_VERSION >= '2.2'
27
- s.add_development_dependency 'rubocop', '~> 0.59'
26
+ if RUBY_VERSION >= '2.4'
27
+ s.add_development_dependency 'rubocop', '~> 1.0'
28
28
  end
29
29
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'progress/elapsed_time'
4
+
5
+ describe Progress::ElapsedTime do
6
+ let(:timeout){ 0.01 }
7
+
8
+ describe '.now' do
9
+ it 'returns incrementing value' do
10
+ expect{ sleep timeout }.to change{ described_class.now }.by_at_least(timeout)
11
+ end
12
+ end
13
+ end
@@ -5,6 +5,7 @@ require 'progress'
5
5
  require 'tempfile'
6
6
  require 'shellwords'
7
7
  require 'csv'
8
+ require 'set'
8
9
 
9
10
  describe Progress do
10
11
  before do
@@ -86,7 +87,7 @@ describe Progress do
86
87
 
87
88
  describe 'with_progress' do
88
89
  it 'returns with block same as when called with each' do
89
- expect(enum.with_progress{}).to eq(enum.with_progress.each{})
90
+ expect(enum.with_progress(&:to_s)).to eq(enum.with_progress.each(&:to_s))
90
91
  end
91
92
 
92
93
  it 'does not break each' do
@@ -180,7 +181,7 @@ describe Progress do
180
181
  describe enum.class do
181
182
  it 'calls each only once' do
182
183
  expect(enum).to receive(:each).once.and_call_original
183
- expect(enum.with_progress.each{}).to eq(enum)
184
+ expect(enum.with_progress.each(&:to_s)).to eq(enum)
184
185
  end
185
186
 
186
187
  include_examples 'yielding', enum
@@ -189,13 +190,13 @@ describe Progress do
189
190
 
190
191
  [
191
192
  100.times,
192
- 'a'..'z',
193
+ ('a'..'z').dup,
193
194
  ].each do |enum|
194
195
  describe enum.class do
195
196
  it 'calls each twice' do
196
- enum_each = enum.each{}
197
+ enum_each = enum.each(&:to_s)
197
198
  expect(enum).to receive(:each).at_most(:twice).and_call_original
198
- expect(enum.with_progress.each{}).to eq(enum_each)
199
+ expect(enum.with_progress.each(&:to_s)).to eq(enum_each)
199
200
  end
200
201
 
201
202
  include_examples 'yielding', enum
@@ -212,7 +213,7 @@ describe Progress do
212
213
 
213
214
  with_progress = Progress::WithProgress.new(enum)
214
215
  expect(with_progress).not_to receive(:warn)
215
- expect(with_progress.each{}).to eq(enum)
216
+ expect(with_progress.each(&:to_s)).to eq(enum)
216
217
  end
217
218
 
218
219
  it 'yields same lines' do
@@ -233,18 +234,18 @@ describe Progress do
233
234
 
234
235
  with_progress = enum.with_progress
235
236
  expect(with_progress).not_to receive(:warn)
236
- expect(with_progress.each{}).to eq(enum)
237
+ expect(with_progress.each(&:to_s)).to eq(enum)
237
238
  end
238
239
  end
239
240
 
240
241
  it 'calls each only once for Tempfile' do
241
242
  enum = Tempfile.open('progress')
242
- enum_each = enum.each{} # returns underlying File
243
+ enum_each = enum.each(&:to_s) # returns underlying File
243
244
  expect(enum_each).to receive(:each).once.and_call_original
244
245
 
245
246
  with_progress = enum.with_progress
246
247
  expect(with_progress).not_to receive(:warn)
247
- expect(with_progress.each{}).to eq(enum_each)
248
+ expect(with_progress.each(&:to_s)).to eq(enum_each)
248
249
  end
249
250
 
250
251
  it 'calls each only once for IO and shows warning' do
@@ -253,7 +254,7 @@ describe Progress do
253
254
 
254
255
  with_progress = enum.with_progress
255
256
  expect(with_progress).to receive(:warn)
256
- expect(with_progress.each{}).to eq(enum)
257
+ expect(with_progress.each(&:to_s)).to eq(enum)
257
258
  end
258
259
 
259
260
  [
@@ -279,8 +280,8 @@ describe Progress do
279
280
 
280
281
  with_progress = enum.with_progress
281
282
  expect(with_progress).not_to receive(:warn)
282
- expect(with_progress.each{}).
283
- to eq(CSV.open('spec/test.csv').each{})
283
+ expect(with_progress.each(&:to_s)).
284
+ to eq(CSV.open('spec/test.csv').each(&:to_s))
284
285
  end
285
286
  else
286
287
  it 'calls each only once for CSV and shows warning' do
@@ -289,7 +290,7 @@ describe Progress do
289
290
 
290
291
  with_progress = enum.with_progress
291
292
  expect(with_progress).to receive(:warn)
292
- expect(with_progress.each{}).to eq(enum)
293
+ expect(with_progress.each(&:to_s)).to eq(enum)
293
294
  end
294
295
  end
295
296
 
@@ -334,11 +335,11 @@ describe Progress do
334
335
  Progress.step 2, 'simle'
335
336
 
336
337
  Progress.step 2, 'times' do
337
- 3.times.with_progress{}
338
+ 3.times.with_progress(&:to_s)
338
339
  end
339
340
 
340
341
  Progress.step 'enum' do
341
- 3.times.to_a.with_progress{}
342
+ 3.times.to_a.with_progress(&:to_s)
342
343
  end
343
344
  end
344
345
  end
@@ -356,11 +357,11 @@ describe Progress do
356
357
  end
357
358
 
358
359
  def on_line(str)
359
- "\r" + str + "\e[K"
360
+ "\r#{str}\e[K"
360
361
  end
361
362
 
362
363
  def line(str)
363
- str + "\n"
364
+ "#{str}\n"
364
365
  end
365
366
 
366
367
  def on_line_n_title(str)
@@ -390,7 +391,7 @@ describe Progress do
390
391
  on_line_n_title("Test: #{hl ' 93.3%'} > #{hl ' 66.7%'}"),
391
392
  on_line_n_title('Test: 100.0% > 100.0%'),
392
393
  on_line_n_title('Test: 100.0% - enum'),
393
- on_line('Test: 100.0% (elapsed: 0s) - enum') + "\n",
394
+ "#{on_line('Test: 100.0% (elapsed: 0s) - enum')}\n",
394
395
  title(''),
395
396
  ].flatten.join)
396
397
  end
@@ -426,7 +427,7 @@ describe Progress do
426
427
  let(:reference_output) do
427
428
  stub_progress_io(reference_io = StringIO.new)
428
429
  count_a.times.with_progress('Test') do
429
- count_b.times.with_progress{}
430
+ count_b.times.with_progress(&:to_s)
430
431
  end
431
432
  reference_io.string
432
433
  end
@@ -468,7 +469,7 @@ describe Progress do
468
469
 
469
470
  it 'outputs same when called using with_progress on list' do
470
471
  count_a.times.to_a.with_progress('Test') do
471
- count_b.times.to_a.with_progress{}
472
+ count_b.times.to_a.with_progress(&:to_s)
472
473
  end
473
474
  expect(io.string).to eq(reference_output)
474
475
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: progress
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.2
4
+ version: 3.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Kuchin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-14 00:00:00.000000000 Z
11
+ date: 2021-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -30,16 +30,16 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.59'
33
+ version: '1.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.59'
41
- description:
42
- email:
40
+ version: '1.0'
41
+ description:
42
+ email:
43
43
  executables: []
44
44
  extensions: []
45
45
  extra_rdoc_files: []
@@ -55,23 +55,25 @@ files:
55
55
  - lib/progress/active_record.rb
56
56
  - lib/progress/beeper.rb
57
57
  - lib/progress/class_methods.rb
58
+ - lib/progress/elapsed_time.rb
58
59
  - lib/progress/enumerable.rb
59
60
  - lib/progress/eta.rb
60
61
  - lib/progress/integer.rb
61
62
  - lib/progress/kernel.rb
62
63
  - lib/progress/with_progress.rb
63
64
  - progress.gemspec
65
+ - spec/progress/elapsed_time_spec.rb
64
66
  - spec/progress_spec.rb
65
67
  - spec/test.csv
66
- homepage: http://github.com/toy/progress
68
+ homepage: https://github.com/toy/progress
67
69
  licenses:
68
70
  - MIT
69
71
  metadata:
70
72
  bug_tracker_uri: https://github.com/toy/progress/issues
71
73
  changelog_uri: https://github.com/toy/progress/blob/master/CHANGELOG.markdown
72
- documentation_uri: https://www.rubydoc.info/gems/progress/3.5.2
74
+ documentation_uri: https://www.rubydoc.info/gems/progress/3.6.0
73
75
  source_code_uri: https://github.com/toy/progress
74
- post_install_message:
76
+ post_install_message:
75
77
  rdoc_options: []
76
78
  require_paths:
77
79
  - lib
@@ -86,10 +88,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
88
  - !ruby/object:Gem::Version
87
89
  version: '0'
88
90
  requirements: []
89
- rubygems_version: 3.0.3
90
- signing_key:
91
+ rubygems_version: 3.1.5
92
+ signing_key:
91
93
  specification_version: 4
92
94
  summary: Show progress of long running tasks
93
95
  test_files:
96
+ - spec/progress/elapsed_time_spec.rb
94
97
  - spec/progress_spec.rb
95
98
  - spec/test.csv