averager 0.0.4 → 0.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/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"
|