simple_eta 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/simple_eta.rb +62 -0
  3. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 50eb4cde5c4c4edb6e667ad8d529a467a31da6894e2cc3ccdca7e511edd9cb9e
4
+ data.tar.gz: f615d0e32b0015c9ba0bcb409a913d0abfbbb129d498e7b855b6ad35c1d0b82f
5
+ SHA512:
6
+ metadata.gz: 9284b452b8b234f34257fc95097e4f1abb83ec50b7a819349cccbb19a0aa57f605b5e5b471fb724317513f3c762961d5491d892dc510fdd1d2e2f811af4c9245
7
+ data.tar.gz: 707d4115077f6a2aac280201eb273f445b3eacbaf22a4dc0e5529a8ae43b5149fce734c089e6562460123effa3706358d5ec40dad85d364f1251a3e19651eb1d
@@ -0,0 +1,62 @@
1
+ # Usage example:
2
+ # eta = SimpleETA::ETA.new(100)
3
+ # 100.times { |i| sleep 1; eta.next! }
4
+ #
5
+ # => [59/100] 59.00% ETA 00m 41s
6
+ #
7
+ class SimpleETA
8
+ DEFAULT_FMT = "\r[%{current}/%{total}] %{percent}%% ETA %{eta} (%{duration})"
9
+ KEYWORDS = {
10
+ "%{total}" => "%1$d",
11
+ "%{current}" => "%2$d",
12
+ "%{percent}" => "%3$.2f",
13
+ "%{duration}" => "%4$s",
14
+ "%{eta}" => "%5$s",
15
+ }
16
+
17
+ def initialize(total, opts = {})
18
+ reset!(opts)
19
+ @total = total.to_i
20
+ @format = opts[:format] || DEFAULT_FMT
21
+ KEYWORDS.each do |keyword, val|
22
+ @format.gsub!(keyword, val)
23
+ end
24
+ end
25
+
26
+ def reset!(opts = {})
27
+ @start_time = opts[:start_time] || Time.now
28
+ @current = 0
29
+ end
30
+
31
+ def next!
32
+ @current += 1
33
+ show
34
+ end
35
+
36
+ def show
37
+ current = @current
38
+ print(@format % [@total, current, percent(current), duration, eta(current)])
39
+ print("\n") if current == @total
40
+ end
41
+
42
+ private
43
+ def percent(current)
44
+ return 100.0 if @total.to_i <= 0
45
+ current * 100 / @total.to_f
46
+ end
47
+
48
+ def duration
49
+ dur = (Time.now - @start_time).to_i
50
+ "%02dm %02ds" % [(dur/60), (dur%60)]
51
+ end
52
+
53
+ def eta(current)
54
+ if current > 0 && current <= @total
55
+ dur = (Time.now - @start_time).to_i
56
+ remaining = dur * (@total - current) / current
57
+ "%02dm %02ds" % [(remaining/60), (remaining%60)]
58
+ else
59
+ "--m --s"
60
+ end
61
+ end
62
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_eta
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Yann Berthou
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-04-24 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A very simple ETA printer ruby 1.8 compatible
14
+ email: firetonton@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/simple_eta.rb
20
+ homepage: http://rubygems.org/gems/simple_eta
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.7.8
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: A very simple ETA
44
+ test_files: []