progress_printer 0.1.0 → 0.2.1

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
- 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