progress_printer 0.1.0 → 0.2.1

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
- SHA1:
3
- metadata.gz: d36d6773874ac74b24ec824a6b9255fb9a6015df
4
- data.tar.gz: 83bca370e9059c05fb447ebe9999d4e4ab61996d
2
+ SHA256:
3
+ metadata.gz: 5d3d46c39de72ccdae5d17e0b344766ba6531f3b1e0850b1d35a7f8c31f7e499
4
+ data.tar.gz: 4cdfccdd8ea9c360e006f8006770b6b5dc3fad34b68f427b9a4fe020a610fcfc
5
5
  SHA512:
6
- metadata.gz: cd946f471c49b66bd5a591abf166cfe5636954bc6415ea3d0b811fb7a2a46b64cf623a95071dcbdb1f0e5a696bdf3895f8f2abdb461a7ba894cd84332fd06455
7
- data.tar.gz: c9b07528d3ff8ea35809cfe7856a24b89f77bc9ae0d654495e07349f84c68a0265dd518dc388f7124f2d7c321a3b7aba8d1048f9dacdc28839b10a3b5dc536c2
6
+ metadata.gz: d2991c9ee3edbf0299680ab3736fcde1b7963d56b99f40d18398da883304966229c4304d4a497e04de602e337ae03266775a9dc787aa22ca61762e5a380fdf52
7
+ data.tar.gz: d3679db624d9eabd39314239d1ef558e7cf56b6521438d1830ffb067c8c15ebf5e0ec84b9f0d7ce43f09437351ab347a9ba20f120f0f94b1b8ae145d262bbe78
@@ -0,0 +1,32 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ rspec:
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ matrix:
17
+ ruby-version:
18
+ - "2.7"
19
+ - "3.0"
20
+ - "3.1"
21
+ - "3.2"
22
+ steps:
23
+ - uses: actions/checkout@v3
24
+
25
+ - name: Set up Ruby
26
+ uses: ruby/setup-ruby@v1
27
+ with:
28
+ ruby-version: ${{ matrix.ruby-version }}
29
+ bundler-cache: true
30
+
31
+ - name: Run tests
32
+ run: bundle exec rake spec
data/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ ## 0.2.1
2
+
3
+ * Fix ProgressPrinter.wrap error on newer Ruby versions [[50d763f](https://github.com/justincampbell/progress_printer/commit/50d763f)]
4
+
5
+ ## 0.2.0
6
+
7
+ * Print the total runtime on #finish [[PR 6](https://github.com/justincampbell/progress_printer/pull/6/files)]
8
+ * Added .wrap/#wrap methods which take blocks [[PR 4](https://github.com/justincampbell/progress_printer/pull/4/files)]
9
+
10
+ ## 0.1.0
11
+
12
+ * Initial release
13
+
data/README.md CHANGED
@@ -1,43 +1,74 @@
1
- # ProgressPrinter
1
+ # ProgressPrinter [![Gem Version](https://badge.fury.io/rb/progress_printer.svg)](https://badge.fury.io/rb/progress_printer)
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/progress_printer`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ > Logs the progress of an operation, with estimated completion time.
6
4
 
7
5
  ## Installation
8
6
 
9
- Add this line to your application's Gemfile:
7
+ When using [Bundler](https://bundler.io), add this to your project's `Gemfile`:
10
8
 
11
9
  ```ruby
12
10
  gem 'progress_printer'
13
11
  ```
14
12
 
15
- And then execute:
13
+ Otherwise, install it with the `gem` command:
14
+
15
+
16
+ ```shell
17
+ $ gem install progress_printer
18
+ ```
16
19
 
17
- $ bundle
20
+ ### Already in a console?
18
21
 
19
- Or install it yourself as:
22
+ ProgressPrinter is in a single file with no dependencies, so you're able to copy/paste the entire file into an `irb` session, and then immediately use `ProgressPrinter.new` (see below). The raw source to copy is available here:
20
23
 
21
- $ gem install progress_printer
24
+ [https://raw.githubusercontent.com/justincampbell/progress_printer/master/lib/progress_printer.rb](https://raw.githubusercontent.com/justincampbell/progress_printer/master/lib/progress_printer.rb)
22
25
 
23
26
  ## Usage
24
27
 
25
- TODO: Write usage instructions here
28
+ ### Basic Usage
26
29
 
27
- ## Development
30
+ A `ProgressPrinter` must be created, started, and finished. Use `#increment` within your operation to increment the progress.
28
31
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
32
+ ```rb
33
+ require 'progress_printer'
30
34
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
35
+ printer = ProgressPrinter.new(name: "Counting", total: 250)
36
+ printer.start
37
+ 250.times { sleep 0.05; printer.increment }
38
+ printer.finish
39
+ ```
32
40
 
33
- ## Contributing
41
+ Output:
34
42
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/justincampbell/progress_printer. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
43
+ ```
44
+ Counting: 0/250 0% calculating...
45
+ Counting: 100/250 40% ~8s
46
+ Counting: 200/250 80% ~2s
47
+ Counting: 250/250 100% 14s total
48
+ ```
49
+
50
+ You can also achieve the same results by using `.wrap` or `#wrap`:
51
+
52
+ ```rb
53
+ ProgressPrinter.wrap(name: "Counting", total: 250) do |progress|
54
+ 250.times { sleep 0.05; progress.increment }
55
+ end
56
+ ```
36
57
 
37
- ## License
58
+ ```rb
59
+ printer = ProgressPrinter.new(name: "Counting", total: 250)
60
+ printer.wrap do |progress|
61
+ 250.times { sleep 0.05; progress.increment }
62
+ end
63
+ ```
64
+
65
+ ### Arguments
38
66
 
39
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
67
+ * `total` - The total number of iterations expected. If this is omitted, estimated completion time will not be shown.
68
+ * `name` - A string to display next to each printed line. This helps identify the current operation, or the specific progress printer if using multiple.
69
+ * `every` (Default: `100`) - How many iterations should pass in between printing a line.
70
+ * `out` (Default: `$stdout`) - An object responding to `#puts` for printing the progress to.
40
71
 
41
- ## Code of Conduct
72
+ ## Contributing
42
73
 
43
- Everyone interacting in the ProgressPrinter project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/justincampbell/progress_printer/blob/master/CODE_OF_CONDUCT.md).
74
+ Bug reports and pull requests are welcome on GitHub at https://github.com/justincampbell/progress_printer. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
@@ -1,3 +1,3 @@
1
1
  class ProgressPrinter
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -12,12 +12,24 @@
12
12
  #
13
13
  # Counting: 0/250 0% calculating...
14
14
  # Counting: 100/250 40% ~1m30s
15
- # Counting: 200/250 80% ~45s
16
- # Counting: 250/250 100% ~0s
15
+ # Counting: 200/250 80% ~30s
16
+ # Counting: 250/250 100% 2m30s total
17
17
  #
18
18
  class ProgressPrinter
19
19
  DEFAULT_EVERY = 100
20
20
 
21
+ class << self
22
+ attr_accessor :silent
23
+
24
+ def silence
25
+ self.silent = true
26
+ end
27
+
28
+ def wrap(**args, &block)
29
+ new(**args).wrap(&block)
30
+ end
31
+ end
32
+
21
33
  attr_reader :total, :name, :every, :out
22
34
  attr_accessor :start_time
23
35
 
@@ -25,7 +37,19 @@ class ProgressPrinter
25
37
  @total = total
26
38
  @name = name
27
39
  @every = every
28
- @out = out
40
+
41
+ if self.class.silent
42
+ @out = StringIO.new
43
+ else
44
+ @out = out
45
+ end
46
+ end
47
+
48
+ def wrap
49
+ start
50
+ yield(self)
51
+ ensure
52
+ finish
29
53
  end
30
54
 
31
55
  def start
@@ -40,11 +64,7 @@ class ProgressPrinter
40
64
  end
41
65
 
42
66
  def finish
43
- if total
44
- print_progress total
45
- else
46
- print_progress current unless at_milestone?
47
- end
67
+ print_progress current, final: true
48
68
  end
49
69
 
50
70
  def percent_complete
@@ -75,8 +95,12 @@ class ProgressPrinter
75
95
  return if percent_remaining == 1.0
76
96
  return 0.0 if percent_remaining == 0.0
77
97
 
78
- time_passed = now - start_time
79
- time_passed / percent_complete * (1.0 - percent_complete)
98
+ time_passed(now) / percent_complete * (1.0 - percent_complete)
99
+ end
100
+
101
+ def time_passed(now = Time.now)
102
+ return unless start_time
103
+ now - start_time
80
104
  end
81
105
 
82
106
  def current
@@ -93,7 +117,7 @@ class ProgressPrinter
93
117
  @enum ||= (1..Float::INFINITY).enum_for
94
118
  end
95
119
 
96
- def print_progress(n)
120
+ def print_progress(n, final: false)
97
121
  buffer = StringIO.new
98
122
 
99
123
  buffer.print "#{name}: " if name
@@ -102,11 +126,20 @@ class ProgressPrinter
102
126
  buffer.print left_pad(n, total_length)
103
127
  buffer.print "/#{total} "
104
128
  buffer.print left_pad(percent_complete_string, 4)
105
- buffer.print " #{estimated_time_remaining}"
106
129
  else
107
130
  buffer.print n
108
131
  end
109
132
 
133
+ if final
134
+ if time_passed
135
+ buffer.print " #{self.class.format_duration(time_passed)} total"
136
+ end
137
+ else
138
+ if total
139
+ buffer.print " #{estimated_time_remaining}"
140
+ end
141
+ end
142
+
110
143
  out.puts buffer.string
111
144
  end
112
145
 
@@ -19,7 +19,6 @@ Gem::Specification.new do |spec|
19
19
  end
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.15"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec", "~> 3.0"
22
+ spec.add_development_dependency "rake", "~> 13.0.6"
23
+ spec.add_development_dependency "rspec", "~> 3.12.0"
25
24
  end
metadata CHANGED
@@ -1,57 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: progress_printer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Campbell
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-13 00:00:00.000000000 Z
11
+ date: 2023-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.15'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.15'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '10.0'
19
+ version: 13.0.6
34
20
  type: :development
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '10.0'
26
+ version: 13.0.6
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rspec
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '3.0'
33
+ version: 3.12.0
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '3.0'
40
+ version: 3.12.0
55
41
  description: Logs the progress of an operation, with estimated completion time.
56
42
  email:
57
43
  - justin@justincampbell.me
@@ -59,9 +45,10 @@ executables: []
59
45
  extensions: []
60
46
  extra_rdoc_files: []
61
47
  files:
48
+ - ".github/workflows/test.yml"
62
49
  - ".gitignore"
63
50
  - ".rspec"
64
- - ".travis.yml"
51
+ - CHANGELOG.md
65
52
  - CODE_OF_CONDUCT.md
66
53
  - Gemfile
67
54
  - LICENSE.txt
@@ -76,7 +63,7 @@ homepage: https://github.com/justincampbell/progress_printer
76
63
  licenses:
77
64
  - MIT
78
65
  metadata: {}
79
- post_install_message:
66
+ post_install_message:
80
67
  rdoc_options: []
81
68
  require_paths:
82
69
  - lib
@@ -91,9 +78,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
78
  - !ruby/object:Gem::Version
92
79
  version: '0'
93
80
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.6.14
96
- signing_key:
81
+ rubygems_version: 3.3.7
82
+ signing_key:
97
83
  specification_version: 4
98
84
  summary: Logs the progress of an operation, with estimated completion time.
99
85
  test_files: []
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.2
5
- before_install: gem install bundler -v 1.15.4