progress-meter 0.0.3 → 0.0.4

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.
@@ -11,6 +11,11 @@
11
11
  # already. Every now and then, it prints the progress report.
12
12
  class Progress
13
13
 
14
+ @@progress_meters = Array.new
15
+ def self.progress_meters
16
+ @@progress_meters
17
+ end
18
+
14
19
  @@monitor = false
15
20
  @@desc = ""
16
21
 
@@ -50,13 +55,23 @@ class Progress
50
55
 
51
56
  # Used to register a new completed loop iteration.
52
57
  #
53
- def tick
54
- @current += 1
58
+ def tick(steps = 1)
59
+ @current += steps
60
+ percent = @current.to_f/ @max.to_f
61
+ if percent - @last_report > 1.to_f/@num_reports.to_f then
62
+ report
63
+ @last_report=percent
64
+ end
65
+ end
66
+
67
+ def set(step)
68
+ @current = step
55
69
  percent = @current.to_f/ @max.to_f
56
70
  if percent - @last_report > 1.to_f/@num_reports.to_f then
57
71
  report
58
72
  @last_report=percent
59
73
  end
74
+
60
75
  end
61
76
 
62
77
  # Prints de progress report. It backs up as many lines as the meters
@@ -104,14 +119,14 @@ end
104
119
 
105
120
 
106
121
  class Array
107
- @@progress_meters = Array.new
108
122
  alias :orig_each :each
109
123
 
110
124
  def each (&block)
111
125
  if Progress.active? then
112
- @@progress_meters.push(Progress.new(self.length, @@progress_meters.size ))
113
- orig_each {|w|block.call(w);@@progress_meters.last.tick;}
114
- @@progress_meters.pop
126
+ progress_meters = Progress::progress_meters
127
+ progress_meters.push(Progress.new(self.length, progress_meters.size ))
128
+ orig_each {|w|block.call(w);progress_meters.last.tick;}
129
+ progress_meters.pop
115
130
  else
116
131
  orig_each &block
117
132
  end
@@ -120,9 +135,10 @@ class Array
120
135
  alias :orig_collect :collect
121
136
  def collect (&block)
122
137
  if Progress.active? then
123
- @@progress_meters.push(Progress.new(self.length, @@progress_meters.size ))
124
- res = orig_collect {|w| r = block.call(w);@@progress_meters.last.tick; r}
125
- @@progress_meters.pop
138
+ progress_meters = Progress::progress_meters
139
+ progress_meters.push(Progress.new(self.length, progress_meters.size ))
140
+ res = orig_collect {|w| r = block.call(w);progress_meters.last.tick; r}
141
+ progress_meters.pop
126
142
  res
127
143
  else
128
144
  orig_collect &block
@@ -136,19 +152,51 @@ end
136
152
 
137
153
 
138
154
  class Hash
139
- @@progress_meters = Array.new
140
155
  alias :orig_each :each
141
156
  def each (&block)
142
157
  if Progress.active? then
143
- $stderr.print "\n"
144
- @@progress_meters.push(Progress.new(self.length, @@progress_meters.size ))
145
- orig_each {|k,v|block.call(k,v);@@progress_meters.last.tick;}
146
- @@progress_meters.pop
158
+ progress_meters = Progress::progress_meters
159
+ progress_meters.push(Progress.new(self.length, progress_meters.size ))
160
+ orig_each {|k,v|block.call(k,v);progress_meters.last.tick;}
161
+ progress_meters.pop
162
+ else
163
+ orig_each &block
164
+ end
165
+ end
166
+
167
+ end
168
+
169
+
170
+
171
+
172
+
173
+ class File
174
+ alias :orig_each :each
175
+ alias :orig_collect :collect
176
+ def each (&block)
177
+ if Progress.active? then
178
+ progress_meters = Progress::progress_meters
179
+ progress_meters.push(Progress.new(self.stat.size, progress_meters.size ))
180
+ orig_each {|l| block.call(l);progress_meters.last.set(self.pos);}
181
+ progress_meters.pop
147
182
  else
148
183
  orig_each &block
149
184
  end
150
185
  end
151
186
 
187
+ def collect (&block)
188
+ if Progress.active? then
189
+ progress_meters = Progress::progress_meters
190
+ progress_meters.push(Progress.new(self.stat.size, progress_meters.size ))
191
+ res = orig_collect {|l| r = block.call(l);progress_meters.last.set(self.pos); r}
192
+ progress_meters.pop
193
+ res
194
+ else
195
+ orig_collect &block
196
+ end
197
+ end
198
+
199
+
152
200
  end
153
201
 
154
202
 
@@ -0,0 +1,7 @@
1
+ require 'lib/progress-meter'
2
+
3
+ f = File.open('README')
4
+ Progress.monitor("File.each")
5
+ f.each{|l|
6
+ sleep(1)
7
+ }
@@ -2,7 +2,7 @@
2
2
  # print stuff. In this case, we print new lines, and the progress meter
3
3
  # is always moved to the line above the last one.
4
4
 
5
- require 'progress-meter'
5
+ require 'lib/progress-meter'
6
6
 
7
7
  h = Hash.new
8
8
 
@@ -1,4 +1,4 @@
1
- require 'progress-meter'
1
+ require 'lib/progress-meter'
2
2
 
3
3
  # Each progress meter backs up one line
4
4
  puts ""
metadata CHANGED
@@ -1,50 +1,58 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: progress-meter
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.0.3
7
- date: 2008-01-18 00:00:00 +01:00
8
- summary: Allows to monitor the progress of some loop. Currently only Array.each, Array.collect and Hash.each
9
- require_paths:
10
- - lib
11
- email: mikisvaz@yahoo.com
12
- homepage:
13
- rubyforge_project:
14
- description:
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.0.4
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Miguel Vazquez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-02-24 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: mikisvaz@yahoo.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
31
24
  files:
32
25
  - lib/progress-meter.rb
33
26
  - samples/two-loops.rb
34
27
  - samples/collect.rb
35
28
  - samples/hash-loop.rb
29
+ - samples/file.rb
36
30
  - README
37
- test_files: []
38
-
31
+ has_rdoc: true
32
+ homepage: https://rubyforge.org/projects/progress-meter/
33
+ post_install_message:
39
34
  rdoc_options: []
40
35
 
41
- extra_rdoc_files:
42
- - README
43
- executables: []
44
-
45
- extensions: []
46
-
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: "0"
43
+ version:
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: "0"
49
+ version:
47
50
  requirements: []
48
51
 
49
- dependencies: []
52
+ rubyforge_project: progress-meter
53
+ rubygems_version: 1.0.1
54
+ signing_key:
55
+ specification_version: 2
56
+ summary: Allows to monitor the progress of some loop. Currently only Array.each, Array.collect and Hash.each. File.each and File.collect supported too.
57
+ test_files: []
50
58