averager 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/averager.rb +27 -7
- data/spec/averager_spec.rb +23 -17
- metadata +5 -10
data/lib/averager.rb
CHANGED
@@ -2,11 +2,23 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
4
|
class Averager
|
5
|
-
VERSION = '0.0
|
5
|
+
VERSION = '0.1.0'
|
6
|
+
|
7
|
+
module ArrayExtensions
|
8
|
+
def each_with_avg(options = {})
|
9
|
+
options[:expected] ||= self.length
|
10
|
+
Averager.new(options) do |a|
|
11
|
+
self.each do |element|
|
12
|
+
yield(element)
|
13
|
+
a.avg
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
6
18
|
|
7
19
|
def initialize(options = {})
|
8
20
|
@started = Time.now
|
9
|
-
@every = options[:every] ||
|
21
|
+
@every = options[:every] || 1.0
|
10
22
|
if @expected = options[:expected]
|
11
23
|
@digits = @expected.to_i.to_s.length
|
12
24
|
end
|
@@ -36,7 +48,12 @@ class Averager
|
|
36
48
|
end
|
37
49
|
|
38
50
|
def print_current?
|
39
|
-
@
|
51
|
+
if @last_printed.nil? || (Time.now - @last_printed) >= @every
|
52
|
+
@last_printed = Time.now
|
53
|
+
true
|
54
|
+
else
|
55
|
+
false
|
56
|
+
end
|
40
57
|
end
|
41
58
|
|
42
59
|
def print_current(status = nil)
|
@@ -78,18 +95,21 @@ class Averager
|
|
78
95
|
end
|
79
96
|
if print_current?
|
80
97
|
print_current(status)
|
81
|
-
true
|
98
|
+
@printed_last = true
|
82
99
|
else
|
83
|
-
false
|
100
|
+
@printed_last = false
|
84
101
|
end
|
102
|
+
@printed_last
|
85
103
|
end
|
86
104
|
|
87
105
|
def finish
|
88
|
-
if !print_current?
|
106
|
+
if !@printed_last && !print_current?
|
89
107
|
print_current
|
90
108
|
end
|
91
109
|
@stream.puts "\n" if @progress_bar
|
92
110
|
@stream.puts "finished in #{Time.now - @started}"
|
93
111
|
@stream.close if ![$stdout, $stderr].include?(@stream)
|
94
112
|
end
|
95
|
-
end
|
113
|
+
end
|
114
|
+
|
115
|
+
Array.send(:include, Averager::ArrayExtensions)
|
data/spec/averager_spec.rb
CHANGED
@@ -9,29 +9,28 @@ describe "Place your specs here" do
|
|
9
9
|
TimeTravel.freeze_to Time.local(2009, 9, 9, 11, 20, 0)
|
10
10
|
end
|
11
11
|
|
12
|
-
it "should
|
13
|
-
avg = Averager.new(:log_path => @log_path, :every =>
|
12
|
+
it "should print the first every time" do
|
13
|
+
avg = Averager.new(:log_path => @log_path, :every => 10, :digits => 3)
|
14
14
|
TimeTravel.jump(1)
|
15
15
|
avg.avg(100, "test")
|
16
|
-
|
17
|
-
avg.avg(300, "test")
|
18
|
-
File.read(@log_path).should == %(100 (100.0): test\n300 (150.0): test\n)
|
16
|
+
File.read(@log_path).should == %(100 (100.0): test\n)
|
19
17
|
end
|
20
18
|
|
21
|
-
it "should only
|
22
|
-
avg = Averager.new(:log_path => @log_path, :every =>
|
23
|
-
TimeTravel.jump(1)
|
24
|
-
avg.avg(100, "100")
|
19
|
+
it "should only print every x seconds" do
|
20
|
+
avg = Averager.new(:log_path => @log_path, :every => 10, :digits => 3)
|
25
21
|
TimeTravel.jump(1)
|
26
|
-
avg.avg(
|
22
|
+
avg.avg(100, "test")
|
23
|
+
File.read(@log_path).should == %(100 (100.0): test\n)
|
27
24
|
TimeTravel.jump(1)
|
28
|
-
avg.avg(
|
29
|
-
|
30
|
-
|
25
|
+
avg.avg(200, "test")
|
26
|
+
File.read(@log_path).should == %(100 (100.0): test\n)
|
27
|
+
TimeTravel.jump(9)
|
28
|
+
avg.avg(1100, "test")
|
29
|
+
File.read(@log_path).should == %(100 (100.0): test\n1100 (100.0): test\n)
|
31
30
|
end
|
32
31
|
|
33
32
|
it "should include a percentage and estimated end time" do
|
34
|
-
avg = Averager.new(:log_path => @log_path, :expected => 1000, :every =>
|
33
|
+
avg = Averager.new(:log_path => @log_path, :expected => 1000, :every => 1.0)
|
35
34
|
TimeTravel.jump(1)
|
36
35
|
avg.avg(500, "500")
|
37
36
|
TimeTravel.jump(1)
|
@@ -40,7 +39,7 @@ describe "Place your specs here" do
|
|
40
39
|
end
|
41
40
|
|
42
41
|
it "should print a progress when asked for" do
|
43
|
-
avg = Averager.new(:log_path => @log_path, :expected => 1000, :every =>
|
42
|
+
avg = Averager.new(:log_path => @log_path, :expected => 1000, :every => 1.0, :progress_bar => true)
|
44
43
|
TimeTravel.jump(1)
|
45
44
|
avg.avg(500, "500")
|
46
45
|
File.read(@log_path).should == %( 500/1000 50.0% (500.0): 500)
|
@@ -50,7 +49,7 @@ describe "Place your specs here" do
|
|
50
49
|
end
|
51
50
|
|
52
51
|
it "should not be mandatory to call with integer" do
|
53
|
-
avg = Averager.new(:log_path => @log_path, :expected => 2, :every => 1)
|
52
|
+
avg = Averager.new(:log_path => @log_path, :expected => 2, :every => 1.0)
|
54
53
|
TimeTravel.jump(1)
|
55
54
|
avg.avg
|
56
55
|
TimeTravel.jump(1)
|
@@ -77,6 +76,13 @@ describe "Place your specs here" do
|
|
77
76
|
TimeTravel.jump(1)
|
78
77
|
avg.avg
|
79
78
|
end
|
80
|
-
File.read(@log_path).should == %(3/3 100.0% (1.0)\nfinished in 3.0\n)
|
79
|
+
File.read(@log_path).should == %(1/3 33.3% (1.0)\n3/3 100.0% (1.0)\nfinished in 3.0\n)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should be able to average over an array" do
|
83
|
+
[1, 2, 3, 4].each_with_avg(:log_path => @log_path) do |i|
|
84
|
+
TimeTravel.jump(1)
|
85
|
+
end
|
86
|
+
File.read(@log_path).should == %(1/4 25.0% (1.0)\n2/4 50.0% (1.0)\n3/4 75.0% (1.0)\n4/4 100.0% (1.0)\nfinished in 4.0\n)
|
81
87
|
end
|
82
88
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: averager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 23
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
7
|
+
- 1
|
8
8
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.4
|
9
|
+
version: 0.1.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Tobias Schwab
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-10-07 00:00:00 +02:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 7
|
30
28
|
segments:
|
31
29
|
- 2
|
32
30
|
- 0
|
@@ -42,12 +40,11 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ">="
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 21
|
46
43
|
segments:
|
47
44
|
- 2
|
48
45
|
- 6
|
49
|
-
-
|
50
|
-
version: 2.6.
|
46
|
+
- 2
|
47
|
+
version: 2.6.2
|
51
48
|
type: :development
|
52
49
|
version_requirements: *id002
|
53
50
|
description: RubyGem to track long running processes.
|
@@ -91,7 +88,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
88
|
requirements:
|
92
89
|
- - ">="
|
93
90
|
- !ruby/object:Gem::Version
|
94
|
-
hash: 3
|
95
91
|
segments:
|
96
92
|
- 0
|
97
93
|
version: "0"
|
@@ -100,7 +96,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
96
|
requirements:
|
101
97
|
- - ">="
|
102
98
|
- !ruby/object:Gem::Version
|
103
|
-
hash: 3
|
104
99
|
segments:
|
105
100
|
- 0
|
106
101
|
version: "0"
|