averager 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/averager.rb +27 -7
  2. data/spec/averager_spec.rb +23 -17
  3. 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.4'
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] || 1000
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
- @i % @every == 0
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)
@@ -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 log to a specific logfile" do
13
- avg = Averager.new(:log_path => @log_path, :every => 1, :digits => 3)
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
- TimeTravel.jump(1)
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 log every x time" do
22
- avg = Averager.new(:log_path => @log_path, :every => 600)
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(300, "300")
22
+ avg.avg(100, "test")
23
+ File.read(@log_path).should == %(100 (100.0): test\n)
27
24
  TimeTravel.jump(1)
28
- avg.avg(600, "600")
29
- avg.avg(601, "601")
30
- File.read(@log_path).should == %( 600 (200.0): 600\n)
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 => 250)
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 => 250, :progress_bar => true)
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
- - 4
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-08-13 00:00:00 +02:00
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
- - 1
50
- version: 2.6.1
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"