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.
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"