progress 0.0.7.1 → 0.0.8
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.
- data/lib/progress.rb +47 -29
- data/lib/progress/enumerable.rb +4 -4
- data/lib/progress/integer.rb +2 -2
- data/progress.gemspec +2 -2
- data/tasks/rspec.rake +1 -1
- metadata +2 -2
data/lib/progress.rb
CHANGED
@@ -4,7 +4,7 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
4
4
|
require 'singleton'
|
5
5
|
|
6
6
|
class Progress
|
7
|
-
VERSION = '0.0.
|
7
|
+
VERSION = '0.0.8'
|
8
8
|
|
9
9
|
include Singleton
|
10
10
|
|
@@ -29,8 +29,12 @@ class Progress
|
|
29
29
|
# sleep(0.001)
|
30
30
|
# end
|
31
31
|
# end
|
32
|
-
|
33
|
-
|
32
|
+
# ==== To output progress as lines (not trying to stay on line)
|
33
|
+
# Progress.start('Test', 1000, :lines => true) do
|
34
|
+
# 1000.times{ Progress.step }
|
35
|
+
# end
|
36
|
+
def self.start(name, total = 1, options = {})
|
37
|
+
levels << new(name, total, levels.length, options)
|
34
38
|
print_message
|
35
39
|
if block_given?
|
36
40
|
result = yield
|
@@ -39,24 +43,11 @@ class Progress
|
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
42
|
-
def
|
43
|
-
levels[-1].step(steps)
|
44
|
-
print_message
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.stop
|
48
|
-
levels.pop.stop
|
49
|
-
@io.puts if levels.empty?
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.io=(io) # :nodoc:
|
53
|
-
@io = io
|
54
|
-
end
|
55
|
-
|
56
|
-
def initialize(name, total, level) # :nodoc:
|
46
|
+
def initialize(name, total, level, options) # :nodoc:
|
57
47
|
@name = name + ': %s'
|
58
48
|
@total = total
|
59
49
|
@level = level
|
50
|
+
@options = options
|
60
51
|
@current = 0
|
61
52
|
start
|
62
53
|
end
|
@@ -78,19 +69,11 @@ class Progress
|
|
78
69
|
@message
|
79
70
|
end
|
80
71
|
|
81
|
-
|
82
|
-
|
83
|
-
def self.print_message
|
84
|
-
message = levels.map{ |level| level.message } * ' > '
|
85
|
-
@io ||= $stderr
|
86
|
-
@io.sync = true
|
87
|
-
@io.print "\r" + message.ljust(@previous_length || 0).gsub(/\d+\.\d+/){ |s| s == '100.0' ? s : "\e[1m#{s}\e[0m" }
|
88
|
-
@previous_length = message.length
|
72
|
+
def options # :nodoc:
|
73
|
+
@options
|
89
74
|
end
|
90
75
|
|
91
|
-
|
92
|
-
@levels ||= []
|
93
|
-
end
|
76
|
+
protected
|
94
77
|
|
95
78
|
def percent
|
96
79
|
'%5.1f%%' % (@current * 100.0 / @total)
|
@@ -100,6 +83,41 @@ protected
|
|
100
83
|
formatted = s.ljust(6)[0, 6]
|
101
84
|
@message = @name % formatted
|
102
85
|
end
|
86
|
+
|
87
|
+
module ClassMethods
|
88
|
+
def step(steps = 1)
|
89
|
+
levels[-1].step(steps)
|
90
|
+
print_message
|
91
|
+
end
|
92
|
+
|
93
|
+
def stop
|
94
|
+
levels.pop.stop
|
95
|
+
@io.puts if levels.empty?
|
96
|
+
end
|
97
|
+
|
98
|
+
def io=(io) # :nodoc:
|
99
|
+
@io = io
|
100
|
+
end
|
101
|
+
|
102
|
+
protected
|
103
|
+
|
104
|
+
def print_message
|
105
|
+
message = levels.map{ |level| level.message } * ' > '
|
106
|
+
@io ||= $stderr
|
107
|
+
@io.sync = true
|
108
|
+
if @io.tty? && !levels.any?{ |level| level.options[:lines] }
|
109
|
+
@io.print "\r" + message.ljust(@previous_length || 0).gsub(/\d+\.\d+/){ |s| s == '100.0' ? s : "\e[1m#{s}\e[0m" }
|
110
|
+
@previous_length = message.length
|
111
|
+
else
|
112
|
+
@io.puts message
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def levels
|
117
|
+
@levels ||= []
|
118
|
+
end
|
119
|
+
end
|
120
|
+
extend ClassMethods
|
103
121
|
end
|
104
122
|
|
105
123
|
require 'progress/enumerable'
|
data/lib/progress/enumerable.rb
CHANGED
@@ -4,8 +4,8 @@ module Enumerable
|
|
4
4
|
# [1, 2, 3].each_with_progress('Numbers') do |number|
|
5
5
|
# sleep(number)
|
6
6
|
# end
|
7
|
-
def each_with_progress(name)
|
8
|
-
Progress.start(name, length) do
|
7
|
+
def each_with_progress(name, options = {})
|
8
|
+
Progress.start(name, length, options) do
|
9
9
|
each do |item|
|
10
10
|
yield item
|
11
11
|
Progress.step
|
@@ -18,8 +18,8 @@ module Enumerable
|
|
18
18
|
# [1, 2, 3].each_with_index_and_progress('Numbers') do |number, index|
|
19
19
|
# sleep(number)
|
20
20
|
# end
|
21
|
-
def each_with_index_and_progress(name)
|
22
|
-
Progress.start(name, length) do
|
21
|
+
def each_with_index_and_progress(name, options = {})
|
22
|
+
Progress.start(name, length, options) do
|
23
23
|
each_with_index do |item, index|
|
24
24
|
yield item, index
|
25
25
|
Progress.step
|
data/lib/progress/integer.rb
CHANGED
@@ -4,8 +4,8 @@ class Integer
|
|
4
4
|
# 100.times_with_progress('Numbers') do |number|
|
5
5
|
# sleep(number)
|
6
6
|
# end
|
7
|
-
def times_with_progress(name)
|
8
|
-
Progress.start(name, self) do
|
7
|
+
def times_with_progress(name, options = {})
|
8
|
+
Progress.start(name, self, options) do
|
9
9
|
times do |i|
|
10
10
|
yield i
|
11
11
|
Progress.step
|
data/progress.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{progress}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.8"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["toy"]
|
9
|
-
s.date = %q{2009-04-
|
9
|
+
s.date = %q{2009-04-27}
|
10
10
|
s.description = %q{A library to show progress of long running tasks.}
|
11
11
|
s.email = %q{}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "lib/progress/enumerable.rb", "lib/progress/integer.rb", "lib/progress.rb", "README.rdoc", "tasks/rspec.rake"]
|
data/tasks/rspec.rake
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: progress
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- toy
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-04-
|
12
|
+
date: 2009-04-27 00:00:00 +04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|