progress 2.0.0 → 2.1.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.
- data/README.markdown +49 -34
- data/lib/progress/with_progress.rb +8 -2
- data/progress.gemspec +1 -1
- metadata +4 -4
data/README.markdown
CHANGED
@@ -1,42 +1,73 @@
|
|
1
1
|
# progress
|
2
2
|
|
3
|
-
|
3
|
+
Show progress during console script run.
|
4
4
|
|
5
|
-
##
|
5
|
+
## Installation:
|
6
6
|
|
7
|
-
|
7
|
+
gem install progress
|
8
8
|
|
9
9
|
## SYNOPSIS:
|
10
10
|
|
11
|
-
1000.times_with_progress('
|
12
|
-
|
11
|
+
1000.times_with_progress('Counting to 1000') do |i|
|
12
|
+
# do something with i
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
or without title:
|
16
|
+
|
17
|
+
1000.times_with_progress do |i|
|
18
|
+
# do something with i
|
17
19
|
end
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
+
With array:
|
22
|
+
|
23
|
+
[1, 2, 3].with_progress('1…2…3').each do |i|
|
24
|
+
# still counting
|
21
25
|
end
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
:d => 'd',
|
28
|
-
}.with_progress('Wait').each do |k, v|
|
29
|
-
puts "#{k} => #{v}"
|
27
|
+
`.each` is optional:
|
28
|
+
|
29
|
+
[1, 2, 3].with_progress('1…2…3') do |i|
|
30
|
+
# =||=
|
30
31
|
end
|
31
32
|
|
33
|
+
Nested progress
|
34
|
+
|
32
35
|
(1..10).with_progress('Outer').map do |a|
|
33
36
|
(1..10).with_progress('Middle').map do |b|
|
34
37
|
(1..10).with_progress('Inner').map do |c|
|
35
|
-
|
38
|
+
# do something with a, b and c
|
36
39
|
end
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
43
|
+
You can also show note:
|
44
|
+
|
45
|
+
[1, 2, 3].with_progress do |i|
|
46
|
+
Progress.note = i
|
47
|
+
sleep 5
|
48
|
+
end
|
49
|
+
|
50
|
+
You can use any enumerable method:
|
51
|
+
|
52
|
+
[1, 2, 3].with_progress.map{ |i| 'do stuff' }
|
53
|
+
[1, 2, 3].with_progress.each_cons(3){ |i| 'do stuff' }
|
54
|
+
[1, 2, 3].with_progress.each_slice(2){ |i| 'do stuff' }
|
55
|
+
# …
|
56
|
+
|
57
|
+
Any enumerable will work:
|
58
|
+
|
59
|
+
(1..100).with_progress('Wait') do |i|
|
60
|
+
# ranges are good
|
61
|
+
end
|
62
|
+
|
63
|
+
Dir.new('.').with_progress do |path|
|
64
|
+
# check path
|
65
|
+
end
|
66
|
+
|
67
|
+
NOTE: progress gets number of objects using `length`, `size`, `to_a.length` or just `inject` and if used on objects which needs rewind (like opened File), cycle itself will not work.
|
68
|
+
|
69
|
+
Use simple blocks:
|
70
|
+
|
40
71
|
symbols = []
|
41
72
|
Progress.start('Input 100 symbols', 100) do
|
42
73
|
while symbols.length < 100
|
@@ -57,7 +88,7 @@ or just
|
|
57
88
|
end
|
58
89
|
end
|
59
90
|
|
60
|
-
|
91
|
+
NOTE: you will get WRONG progress if you use something like this:
|
61
92
|
|
62
93
|
10.times_with_progress('A') do |time|
|
63
94
|
10.times_with_progress('B') do
|
@@ -98,22 +129,6 @@ Or if you know that B runs 10 times faster than C:
|
|
98
129
|
end
|
99
130
|
end
|
100
131
|
|
101
|
-
You can also show note:
|
102
|
-
|
103
|
-
[1, 2, 3].with_progress('Wait').each do |i|
|
104
|
-
sleep 1
|
105
|
-
Progress.note = i
|
106
|
-
end
|
107
|
-
|
108
|
-
|
109
|
-
## REQUIREMENTS:
|
110
|
-
|
111
|
-
ruby )))
|
112
|
-
|
113
|
-
## INSTALL:
|
114
|
-
|
115
|
-
sudo gem install progress
|
116
|
-
|
117
132
|
## Copyright
|
118
133
|
|
119
134
|
Copyright (c) 2010-2011 Ivan Kuchin. See LICENSE.txt for details.
|
@@ -4,11 +4,14 @@ class Progress
|
|
4
4
|
class WithProgress
|
5
5
|
include Enumerable
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
# initialize with object responding to each, title and optional length
|
8
|
+
# if block is provided, it is passed to each
|
9
|
+
def initialize(enumerable, title, length = nil, &block)
|
10
|
+
@enumerable, @title, @length = enumerable, title, length
|
9
11
|
each(&block) if block
|
10
12
|
end
|
11
13
|
|
14
|
+
# each object with progress
|
12
15
|
def each
|
13
16
|
Progress.start(@title, length) do
|
14
17
|
@enumerable.each do |object|
|
@@ -19,6 +22,7 @@ class Progress
|
|
19
22
|
end
|
20
23
|
end
|
21
24
|
|
25
|
+
# determine number of objects
|
22
26
|
def length
|
23
27
|
@length ||= if @enumerable.respond_to?(:length) && !@enumerable.is_a?(String)
|
24
28
|
@enumerable.length
|
@@ -31,7 +35,9 @@ class Progress
|
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
38
|
+
# returns self but changes title
|
34
39
|
def with_progress(title = nil)
|
40
|
+
@title = title
|
35
41
|
self
|
36
42
|
end
|
37
43
|
end
|
data/progress.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: progress
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 2.0.0
|
10
|
+
version: 2.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ivan Kuchin
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-11-
|
18
|
+
date: 2011-11-29 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rspec
|