averager 0.2.0 → 0.2.1

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.
@@ -0,0 +1,22 @@
1
+ if Gem.available?("autotest-fsevent")
2
+ require 'autotest/fsevent'
3
+ end
4
+
5
+ Autotest.add_hook :initialize do |at|
6
+ at.add_exception(%r{^\./\.git})
7
+ at.add_exception(%r{^\./db})
8
+ at.add_exception(%r{^\./log})
9
+ at.add_exception(%r{^\./tmp})
10
+ at.add_exception(%r{^\./rerun.txt})
11
+ at.add_exception(%r{^\./Gemfile.lock})
12
+ at.add_exception(%r{^\./Gemfile.lock})
13
+ at.add_exception(%r{^\./spec/.*?\.txt})
14
+ at.add_exception(%r{^\./spec/.*?\.html})
15
+
16
+ at.add_mapping(%r%^spec/(.*?)/.*rb$%) { |filename, _|
17
+ filename
18
+ }
19
+ at.add_mapping(%r%^lib/(.*?)\/([^\/]*?)\.rb$%) { |_, m|
20
+ ["spec/#{m[1]}/#{m[2]}_spec.rb"]
21
+ }
22
+ end
data/Gemfile CHANGED
@@ -1,11 +1,14 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- group :development do
3
+ group :development, :test do
4
4
  if RUBY_VERSION.match(/^1\.8/)
5
5
  gem 'ruby-debug'
6
6
  elsif RUBY_VERSION.match(/^1\.9/)
7
7
  gem 'ruby-debug19'
8
8
  end
9
+ gem 'timecop'
10
+ gem 'autotest'
11
+ gem 'autotest-growl'
9
12
  gem "rspec", ">= 2.0.0.beta.19"
10
13
  gem "bundler", "~> 1.0.0"
11
14
  gem "jeweler", "~> 1.5.0.pre3"
@@ -1,6 +1,10 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ ZenTest (4.4.1)
5
+ autotest (4.4.6)
6
+ ZenTest (>= 4.4.1)
7
+ autotest-growl (0.2.8)
4
8
  columnize (0.3.1)
5
9
  diff-lcs (1.1.2)
6
10
  git (1.2.5)
@@ -26,13 +30,17 @@ GEM
26
30
  ruby-debug-base (~> 0.10.3.0)
27
31
  ruby-debug-base (0.10.3)
28
32
  linecache (>= 0.3)
33
+ timecop (0.3.5)
29
34
 
30
35
  PLATFORMS
31
36
  ruby
32
37
 
33
38
  DEPENDENCIES
39
+ autotest
40
+ autotest-growl
34
41
  bundler (~> 1.0.0)
35
42
  jeweler (~> 1.5.0.pre3)
36
43
  rcov
37
44
  rspec (>= 2.0.0.beta.19)
38
45
  ruby-debug
46
+ timecop
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -0,0 +1 @@
1
+ Autotest.add_discovery { "rspec2" }
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{averager}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tobias Schwab"]
12
- s.date = %q{2010-11-03}
12
+ s.date = %q{2010-12-15}
13
13
  s.description = %q{RubyGem to track long running processes.}
14
14
  s.email = %q{tobias.schwab@dynport.de}
15
15
  s.extra_rdoc_files = [
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
  "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
+ ".autotest",
20
21
  ".bundle/config",
21
22
  ".rspec",
22
23
  "Gemfile",
@@ -25,11 +26,11 @@ Gem::Specification.new do |s|
25
26
  "README.rdoc",
26
27
  "Rakefile",
27
28
  "VERSION",
29
+ "autotest/discover.rb",
28
30
  "averager.gemspec",
29
31
  "lib/averager.rb",
30
32
  "spec/averager_spec.rb",
31
- "spec/spec_helper.rb",
32
- "spec/time_travel.rb"
33
+ "spec/spec_helper.rb"
33
34
  ]
34
35
  s.homepage = %q{http://github.com/tobstarr/averager}
35
36
  s.require_paths = ["lib"]
@@ -37,8 +38,7 @@ Gem::Specification.new do |s|
37
38
  s.summary = %q{RubyGem to track long running processes.}
38
39
  s.test_files = [
39
40
  "spec/averager_spec.rb",
40
- "spec/spec_helper.rb",
41
- "spec/time_travel.rb"
41
+ "spec/spec_helper.rb"
42
42
  ]
43
43
 
44
44
  if s.respond_to? :specification_version then
@@ -47,6 +47,9 @@ Gem::Specification.new do |s|
47
47
 
48
48
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
49
  s.add_development_dependency(%q<ruby-debug>, [">= 0"])
50
+ s.add_development_dependency(%q<timecop>, [">= 0"])
51
+ s.add_development_dependency(%q<autotest>, [">= 0"])
52
+ s.add_development_dependency(%q<autotest-growl>, [">= 0"])
50
53
  s.add_development_dependency(%q<rspec>, [">= 2.0.0.beta.19"])
51
54
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
52
55
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
@@ -57,6 +60,9 @@ Gem::Specification.new do |s|
57
60
  s.add_development_dependency(%q<rcov>, [">= 0"])
58
61
  else
59
62
  s.add_dependency(%q<ruby-debug>, [">= 0"])
63
+ s.add_dependency(%q<timecop>, [">= 0"])
64
+ s.add_dependency(%q<autotest>, [">= 0"])
65
+ s.add_dependency(%q<autotest-growl>, [">= 0"])
60
66
  s.add_dependency(%q<rspec>, [">= 2.0.0.beta.19"])
61
67
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
62
68
  s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
@@ -68,6 +74,9 @@ Gem::Specification.new do |s|
68
74
  end
69
75
  else
70
76
  s.add_dependency(%q<ruby-debug>, [">= 0"])
77
+ s.add_dependency(%q<timecop>, [">= 0"])
78
+ s.add_dependency(%q<autotest>, [">= 0"])
79
+ s.add_dependency(%q<autotest-growl>, [">= 0"])
71
80
  s.add_dependency(%q<rspec>, [">= 2.0.0.beta.19"])
72
81
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
73
82
  s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
@@ -1,10 +1,15 @@
1
1
  $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  class Averager
5
- module ArrayExtensions
5
+ attr_accessor :every, :expected, :digits, :log_path, :stream, :progress_bar, :counter
6
+ DEFAULT_EVERY = 1.0
7
+ DEFAULT_DIGITS = 7
8
+
9
+ module ObjectExtensions
6
10
  def each_with_avg(options = {})
7
- options[:expected] ||= self.length
11
+ raise NoMethodError if !self.respond_to?(:each)
12
+ options[:expected] ||= self.count if self.respond_to?(:count)
8
13
  Averager.new(options) do |a|
9
14
  self.each do |element|
10
15
  yield(element)
@@ -16,37 +21,41 @@ class Averager
16
21
 
17
22
  def initialize(options = {})
18
23
  @started = Time.now
19
- @every = options[:every] || 1.0
20
- if @expected = options[:expected]
21
- @digits = @expected.to_i.to_s.length
22
- end
23
- if options[:digits]
24
- @digits = options[:digits]
25
- else
26
- @digits ||= 7
27
- end
28
- @log_path = options[:log_path]
29
- @stream = options[:stream] || STDOUT
24
+ self.every = options[:every] || DEFAULT_EVERY
25
+ self.expected = options[:expected]
26
+ self.digits = options[:digits] if options[:digits]
27
+ self.digits ||= DEFAULT_DIGITS
28
+ self.stream = options[:stream] || $stdout
29
+ self.log_path = options[:log_path]
30
+ self.progress_bar = options[:progress_bar] == true
31
+ self.counter = 0
30
32
  flush_stream_for_progress
31
- @progress_bar = options[:progress_bar] == true
32
- @i = 0
33
33
  if block_given?
34
34
  yield(self)
35
35
  self.finish
36
36
  end
37
37
  end
38
38
 
39
- def flush_stream_for_progress
40
- if @log_path
41
- FileUtils.mkdir_p(File.dirname(@log_path))
42
- @stream = File.open(@log_path, "w")
43
- else
44
- @stream.print "\r"
39
+ def expected=(new_value)
40
+ if @expected = new_value
41
+ self.digits = new_value.to_i.to_s.length
45
42
  end
46
43
  end
47
44
 
45
+ def log_path=(new_path)
46
+ if new_path
47
+ @log_path = new_path
48
+ FileUtils.mkdir_p(File.dirname(new_path))
49
+ self.stream = File.open(new_path, "a")
50
+ end
51
+ end
52
+
53
+ def flush_stream_for_progress
54
+ self.stream.print("\r") if self.log_path.nil?
55
+ end
56
+
48
57
  def print_current?
49
- if @last_printed.nil? || (Time.now - @last_printed) >= @every
58
+ if @last_printed.nil? || (Time.now - @last_printed) >= self.every
50
59
  @last_printed = Time.now
51
60
  true
52
61
  else
@@ -55,20 +64,20 @@ class Averager
55
64
  end
56
65
 
57
66
  def print_current(status = nil)
58
- return if @i == 0
59
- per_second = @i / (Time.now - @started)
67
+ return if self.counter == 0
68
+ per_second = self.counter / (Time.now - @started)
60
69
  out = nil
61
70
  if block_given?
62
- out = yield(:digits => @digits, :iteration => @i, :per_second => per_second, :status => status)
71
+ out = yield(:digits => self.digits, :iteration => self.counter, :per_second => per_second, :status => status)
63
72
  else
64
- out = "%#{@digits}d" % @i
73
+ out = "%#{self.digits}d" % self.counter
65
74
  if @expected
66
75
  out << "/#{@expected}"
67
- out << " %3.1f%" % (100 * (@i / @expected.to_f)) if @i <= @expected
76
+ out << " %3.1f%" % (100 * (self.counter / @expected.to_f)) if self.counter <= @expected
68
77
  end
69
78
  out << " (%.1f/second" % [per_second]
70
- if !per_second.infinite? && @expected && @i < @expected
71
- missing = @expected - @i
79
+ if !per_second.infinite? && @expected && self.counter < @expected
80
+ missing = @expected - self.counter
72
81
  seconds = missing / per_second
73
82
  hours = (seconds / 3600.0).floor
74
83
  seconds -= (hours * 3600)
@@ -79,7 +88,7 @@ class Averager
79
88
  out << ")"
80
89
  out << ": #{status}" if status
81
90
  end
82
- if @progress_bar
91
+ if self.progress_bar
83
92
  flush_stream_for_progress
84
93
  @stream.print out
85
94
  else
@@ -95,12 +104,12 @@ class Averager
95
104
  status = args.shift
96
105
  end
97
106
  if i_or_status.is_a?(Numeric)
98
- @i = i_or_status
107
+ self.counter = i_or_status
99
108
  else
100
109
  if i_or_status.is_a?(String)
101
110
  status = i_or_status
102
111
  end
103
- @i += 1
112
+ self.counter += 1
104
113
  end
105
114
  if print_current?
106
115
  print_current(status)
@@ -115,10 +124,10 @@ class Averager
115
124
  if !@printed_last && !print_current?
116
125
  print_current
117
126
  end
118
- @stream.puts "\n" if @progress_bar
127
+ @stream.puts "\n" if self.progress_bar
119
128
  @stream.puts "finished in #{Time.now - @started}"
120
129
  @stream.close if ![$stdout, $stderr].include?(@stream)
121
130
  end
122
131
  end
123
132
 
124
- Array.send(:include, Averager::ArrayExtensions)
133
+ Object.send(:include, Averager::ObjectExtensions)
@@ -1,101 +1,261 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
1
+ require File.expand_path("../spec/spec_helper", File.basename(__FILE__))
2
2
 
3
3
  # Time to add your specs!
4
4
  # http://rspec.info/
5
5
  describe "Place your specs here" do
6
+ let(:log_dir) { project_root.join("tmp/logs/averager") }
7
+ let(:log_file) { log_dir.join("out.log") }
8
+ let(:stream) { double("stream").as_null_object }
9
+
6
10
  before(:each) do
7
- @log_path = File.expand_path(File.dirname("#{__FILE__}") + "/../tmp/status.log")
8
- FileUtils.rm_f(@log_path)
9
- TimeTravel.freeze_to Time.local(2009, 9, 9, 11, 20, 0)
11
+ FileUtils.rm_rf(log_dir)
12
+ Timecop.freeze Time.local(2009, 9, 9, 11, 20, 0)
13
+ end
14
+
15
+ after(:each) do
16
+ Timecop.return
17
+ end
18
+
19
+ describe "#initialize" do
20
+ it "sets every to 1.0 when not set" do
21
+ Averager.new.every.should == 1.0
22
+ end
23
+
24
+ it "sets every to a value when set" do
25
+ Averager.new(:every => 10.0).every.should == 10.0
26
+ end
27
+
28
+ it "does not set expected when nothing provided" do
29
+ Averager.new.expected.should be_nil
30
+ end
31
+
32
+ describe "setting expected" do
33
+ it "sets expected" do
34
+ Averager.new(:expected => 10).expected.should == 10
35
+ end
36
+
37
+ it "sets the correct amount of digits" do
38
+ Averager.new(:expected => 10).digits.should == 2
39
+ end
40
+
41
+ it "overwrites digits from expected" do
42
+ Averager.new(:expected => 10, :digits => 3).digits.should == 3
43
+ end
44
+ end
45
+
46
+ it "sets the digits to default value when not given" do
47
+ Averager.new.digits.should == 7
48
+ end
49
+
50
+ it "sets log_path to path when provided" do
51
+ Averager.new(:log_path => "/tmp/out.log").log_path.should == "/tmp/out.log"
52
+ end
53
+
54
+ it "sets the stream when to $stdout when not set" do
55
+ Averager.new.stream.should == $stdout
56
+ end
57
+
58
+ it "sets the stream to a stream when present" do
59
+ stream = double("stream").as_null_object
60
+ Averager.new(:stream => stream).stream.should == stream
61
+ end
62
+
63
+ it "sets progress_bar to true when provided" do
64
+ Averager.new(:progress_bar => true).progress_bar.should == true
65
+ end
66
+
67
+ it "sets porgress_bar to false when nil" do
68
+ Averager.new(:progress_bar => nil).progress_bar.should == false
69
+ end
70
+
71
+ it "sets porgress_bar to false when something wird" do
72
+ Averager.new(:progress_bar => false).progress_bar.should == false
73
+ end
74
+
75
+ it "sets the counter to 0" do
76
+ Averager.new.counter.should == 0
77
+ end
78
+
79
+ describe "with log_path given" do
80
+ it "creates the path of log file when not exists" do
81
+ Averager.new(:log_path => log_file)
82
+ File.should be_exists(log_dir)
83
+ end
84
+
85
+ it "creates the logfile" do
86
+ Averager.new(:log_path => log_file)
87
+ File.should be_exists(log_file)
88
+ end
89
+
90
+ it "opens the file for appending" do
91
+ stream = double("stream").as_null_object
92
+ File.should_receive(:open).with(log_file, "a").and_return stream
93
+ Averager.new(:log_path => log_file)
94
+ end
95
+ end
96
+
97
+ describe "with a block" do
98
+ it "yields the block with itself" do
99
+ results = []
100
+ Averager.new(:stream => double("stream").as_null_object) do |a|
101
+ results << a
102
+ end
103
+ results.first.should be_an_instance_of(Averager)
104
+ end
105
+
106
+ it "calls finish on after yielding" do
107
+ Averager.new do |a|
108
+ a.should_receive(:finish)
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ describe "#each_with_avg" do
115
+ class OpenIterator
116
+ def each
117
+ 10.times do |i|
118
+ yield(i)
119
+ end
120
+ end
121
+ end
122
+
123
+ class ClosedIterator
124
+ def each
125
+ 10.times do |i|
126
+ yield(i)
127
+ end
128
+ end
129
+
130
+ def count
131
+ 10
132
+ end
133
+ end
134
+
135
+ it "raises a NoMethodError when calling on a object which does not define each" do
136
+ lambda {
137
+ Object.new.each_with_avg
138
+ }.should raise_error(NoMethodError)
139
+ end
140
+
141
+ describe "with objects responding to each only" do
142
+ it "should respond to each_with_avg" do
143
+ OpenIterator.new.should respond_to(:each_with_avg)
144
+ end
145
+
146
+ it "initializes a new averager without expected" do
147
+ Averager.should_receive(:new).with({:stream => stream})
148
+ OpenIterator.new.each_with_avg(:stream => stream) do |a|
149
+ end
150
+ end
151
+
152
+ it "hands options given to each_with_avg to averager" do
153
+ Averager.should_receive(:new).with({:every => 10, :stream => stream})
154
+ OpenIterator.new.each_with_avg(:every => 10, :stream => stream) do |a|
155
+ end
156
+ end
157
+
158
+ it "calls avg 10 times" do
159
+ stream.should_receive(:puts).exactly(11).times
160
+ OpenIterator.new.each_with_avg(:stream => stream) do |a|
161
+ Timecop.freeze Time.now + 1
162
+ end
163
+ end
164
+
165
+ it "does not raise NoMethodError" do
166
+ lambda {
167
+ OpenIterator.new.each_with_avg(:stream => stream) do
168
+ end
169
+ }.should_not raise_error
170
+ end
171
+ end
172
+
173
+ describe "with objects responding to each and count" do
174
+ it "merges expected into options when initializing averager" do
175
+ Averager.should_receive(:new).with({:every => 10, :stream => stream, :expected => 10})
176
+ ClosedIterator.new.each_with_avg(:every => 10, :stream => stream) do |a|
177
+ end
178
+ end
179
+ end
10
180
  end
11
181
 
12
182
  it "should print the first every time" do
13
- avg = Averager.new(:log_path => @log_path, :every => 10, :digits => 3)
14
- TimeTravel.jump(1)
183
+ avg = Averager.new(:log_path => log_file, :every => 10, :digits => 3)
184
+ Timecop.freeze Time.now + 1
15
185
  avg.avg(100, "test")
16
- File.read(@log_path).should == %(100 (100.0/second): test\n)
186
+ File.read(log_file).should == %(100 (100.0/second): test\n)
17
187
  end
18
188
 
19
189
  it "should only print every x seconds" do
20
- avg = Averager.new(:log_path => @log_path, :every => 10, :digits => 3)
21
- TimeTravel.jump(1)
190
+ avg = Averager.new(:log_path => log_file, :every => 10, :digits => 3)
191
+ Timecop.freeze Time.now + 1
22
192
  avg.avg(100, "test")
23
- File.read(@log_path).should == %(100 (100.0/second): test\n)
24
- TimeTravel.jump(1)
193
+ File.read(log_file).should == %(100 (100.0/second): test\n)
194
+ Timecop.freeze Time.now + 1
25
195
  avg.avg(200, "test")
26
- File.read(@log_path).should == %(100 (100.0/second): test\n)
27
- TimeTravel.jump(9)
196
+ File.read(log_file).should == %(100 (100.0/second): test\n)
197
+ Timecop.freeze Time.now + 9
28
198
  avg.avg(1100, "test")
29
- File.read(@log_path).should == %(100 (100.0/second): test\n1100 (100.0/second): test\n)
199
+ File.read(log_file).should == %(100 (100.0/second): test\n1100 (100.0/second): test\n)
30
200
  end
31
201
 
32
202
  it "should include a percentage and estimated end time" do
33
- avg = Averager.new(:log_path => @log_path, :expected => 1000, :every => 1.0)
34
- TimeTravel.jump(1)
35
- avg.avg(500, "500")
36
- TimeTravel.jump(1)
37
- avg.avg(750, "750")
38
- File.read(@log_path).should == %( 500/1000 50.0% (500.0/second 00:00:01): 500\n 750/1000 75.0% (375.0/second 00:00:00): 750\n)
39
- end
40
-
41
- it "should print a progress when asked for" do
42
- avg = Averager.new(:log_path => @log_path, :expected => 1000, :every => 1.0, :progress_bar => true)
43
- TimeTravel.jump(1)
203
+ avg = Averager.new(:log_path => log_file, :expected => 1000, :every => 1.0)
204
+ Timecop.freeze Time.now + 1
44
205
  avg.avg(500, "500")
45
- File.read(@log_path).should == %( 500/1000 50.0% (500.0/second 00:00:01): 500)
46
- TimeTravel.jump(1)
206
+ Timecop.freeze Time.now + 1
47
207
  avg.avg(750, "750")
48
- File.read(@log_path).should == %( 750/1000 75.0% (375.0/second 00:00:00): 750)
208
+ File.read(log_file).should == %( 500/1000 50.0% (500.0/second 00:00:01): 500\n 750/1000 75.0% (375.0/second 00:00:00): 750\n)
49
209
  end
50
210
 
51
211
  it "should not be mandatory to call with integer" do
52
- avg = Averager.new(:log_path => @log_path, :expected => 2, :every => 1.0)
53
- TimeTravel.jump(1)
212
+ avg = Averager.new(:log_path => log_file, :expected => 2, :every => 1.0)
213
+ Timecop.freeze Time.now + 1
54
214
  avg.avg
55
- TimeTravel.jump(1)
215
+ Timecop.freeze Time.now + 1
56
216
  avg.avg
57
- File.read(@log_path).should == %(1/2 50.0% (1.0/second 00:00:01)\n2/2 100.0% (1.0/second)\n)
217
+ File.read(log_file).should == %(1/2 50.0% (1.0/second 00:00:01)\n2/2 100.0% (1.0/second)\n)
58
218
  end
59
219
 
60
220
  it "should be able to be called with a block" do
61
- Averager.new(:log_path => @log_path, :expected => 2, :every => 1) do |avg|
62
- TimeTravel.jump(1)
221
+ Averager.new(:log_path => log_file, :expected => 2, :every => 1) do |avg|
222
+ Timecop.freeze Time.now + 1
63
223
  avg.avg
64
- TimeTravel.jump(1)
224
+ Timecop.freeze Time.now + 1
65
225
  avg.avg
66
226
  end
67
- File.read(@log_path).should == %(1/2 50.0% (1.0/second 00:00:01)\n2/2 100.0% (1.0/second)\nfinished in 2.0\n)
227
+ File.read(log_file).should == %(1/2 50.0% (1.0/second 00:00:01)\n2/2 100.0% (1.0/second)\nfinished in 2.0\n)
68
228
  end
69
229
 
70
230
  it "should not break on printing first and per_second is null" do
71
- Averager.new(:log_path => @log_path, :expected => 2, :every => 1) do |a|
231
+ Averager.new(:log_path => log_file, :expected => 2, :every => 1) do |a|
72
232
  a.avg
73
233
  end
74
- File.read(@log_path).should == "1/2 50.0% (inf/second)\nfinished in 0.0\n"
234
+ File.read(log_file).should == "1/2 50.0% (inf/second)\nfinished in 0.0\n"
75
235
  end
76
236
 
77
237
  it "should not break when per_second is 0.0" do
78
- Averager.new(:log_path => @log_path, :expected => 2, :every => 1) do |a|
238
+ Averager.new(:log_path => log_file, :expected => 2, :every => 1) do |a|
79
239
  a.avg(0.0)
80
240
  end
81
241
  end
82
242
 
83
243
  it "should print the last status when finished before" do
84
- Averager.new(:log_path => @log_path, :expected => 3, :every => 4) do |avg|
85
- TimeTravel.jump(1)
244
+ Averager.new(:log_path => log_file, :expected => 3, :every => 4) do |avg|
245
+ Timecop.freeze Time.now + 1
86
246
  avg.avg
87
- TimeTravel.jump(1)
247
+ Timecop.freeze Time.now + 1
88
248
  avg.avg
89
- TimeTravel.jump(1)
249
+ Timecop.freeze Time.now + 1
90
250
  avg.avg
91
251
  end
92
- File.read(@log_path).should == %(1/3 33.3% (1.0/second 00:00:02)\n3/3 100.0% (1.0/second)\nfinished in 3.0\n)
252
+ File.read(log_file).should == %(1/3 33.3% (1.0/second 00:00:02)\n3/3 100.0% (1.0/second)\nfinished in 3.0\n)
93
253
  end
94
254
 
95
255
  it "should be able to average over an array" do
96
- [1, 2, 3, 4].each_with_avg(:log_path => @log_path) do |i|
97
- TimeTravel.jump(1)
256
+ [1, 2, 3, 4].each_with_avg(:log_path => log_file) do |i|
257
+ Timecop.freeze Time.now + 1
98
258
  end
99
- File.read(@log_path).should == %(1/4 25.0% (1.0/second 00:00:03)\n2/4 50.0% (1.0/second 00:00:02)\n3/4 75.0% (1.0/second 00:00:01)\n4/4 100.0% (1.0/second)\nfinished in 4.0\n)
259
+ File.read(log_file).should == %(1/4 25.0% (1.0/second 00:00:03)\n2/4 50.0% (1.0/second 00:00:02)\n3/4 75.0% (1.0/second 00:00:01)\n4/4 100.0% (1.0/second)\nfinished in 4.0\n)
100
260
  end
101
261
  end
@@ -11,7 +11,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
11
11
  require 'averager'
12
12
  require 'rspec'
13
13
  require 'rspec/autorun'
14
- require 'time_travel'
14
+ require "timecop"
15
15
 
16
16
  if defined?(Debugger) && Debugger.respond_to?(:settings)
17
17
  Debugger.settings[:autolist] = 1
@@ -22,6 +22,10 @@ end
22
22
  # in ./support/ and its subdirectories.
23
23
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
24
24
 
25
+ def project_root
26
+ Pathname.new(File.expand_path("..", File.basename(__FILE__)))
27
+ end
28
+
25
29
  RSpec.configure do |config|
26
30
 
27
31
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: averager
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
9
+ - 1
10
+ version: 0.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Schwab
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-03 00:00:00 +01:00
18
+ date: 2010-12-15 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -35,8 +35,50 @@ dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  prerelease: false
37
37
  type: :development
38
- name: rspec
38
+ name: timecop
39
39
  version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ requirement: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ prerelease: false
51
+ type: :development
52
+ name: autotest
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirement: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ prerelease: false
65
+ type: :development
66
+ name: autotest-growl
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ requirement: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ prerelease: false
79
+ type: :development
80
+ name: rspec
81
+ version_requirements: &id005 !ruby/object:Gem::Requirement
40
82
  none: false
41
83
  requirements:
42
84
  - - ">="
@@ -49,12 +91,12 @@ dependencies:
49
91
  - beta
50
92
  - 19
51
93
  version: 2.0.0.beta.19
52
- requirement: *id002
94
+ requirement: *id005
53
95
  - !ruby/object:Gem::Dependency
54
96
  prerelease: false
55
97
  type: :development
56
98
  name: bundler
57
- version_requirements: &id003 !ruby/object:Gem::Requirement
99
+ version_requirements: &id006 !ruby/object:Gem::Requirement
58
100
  none: false
59
101
  requirements:
60
102
  - - ~>
@@ -65,12 +107,12 @@ dependencies:
65
107
  - 0
66
108
  - 0
67
109
  version: 1.0.0
68
- requirement: *id003
110
+ requirement: *id006
69
111
  - !ruby/object:Gem::Dependency
70
112
  prerelease: false
71
113
  type: :development
72
114
  name: jeweler
73
- version_requirements: &id004 !ruby/object:Gem::Requirement
115
+ version_requirements: &id007 !ruby/object:Gem::Requirement
74
116
  none: false
75
117
  requirements:
76
118
  - - ~>
@@ -82,12 +124,12 @@ dependencies:
82
124
  - 0
83
125
  - pre3
84
126
  version: 1.5.0.pre3
85
- requirement: *id004
127
+ requirement: *id007
86
128
  - !ruby/object:Gem::Dependency
87
129
  prerelease: false
88
130
  type: :development
89
131
  name: rcov
90
- version_requirements: &id005 !ruby/object:Gem::Requirement
132
+ version_requirements: &id008 !ruby/object:Gem::Requirement
91
133
  none: false
92
134
  requirements:
93
135
  - - ">="
@@ -96,12 +138,12 @@ dependencies:
96
138
  segments:
97
139
  - 0
98
140
  version: "0"
99
- requirement: *id005
141
+ requirement: *id008
100
142
  - !ruby/object:Gem::Dependency
101
143
  prerelease: false
102
144
  type: :development
103
145
  name: rspec
104
- version_requirements: &id006 !ruby/object:Gem::Requirement
146
+ version_requirements: &id009 !ruby/object:Gem::Requirement
105
147
  none: false
106
148
  requirements:
107
149
  - - ">="
@@ -114,12 +156,12 @@ dependencies:
114
156
  - beta
115
157
  - 19
116
158
  version: 2.0.0.beta.19
117
- requirement: *id006
159
+ requirement: *id009
118
160
  - !ruby/object:Gem::Dependency
119
161
  prerelease: false
120
162
  type: :development
121
163
  name: bundler
122
- version_requirements: &id007 !ruby/object:Gem::Requirement
164
+ version_requirements: &id010 !ruby/object:Gem::Requirement
123
165
  none: false
124
166
  requirements:
125
167
  - - ~>
@@ -130,12 +172,12 @@ dependencies:
130
172
  - 0
131
173
  - 0
132
174
  version: 1.0.0
133
- requirement: *id007
175
+ requirement: *id010
134
176
  - !ruby/object:Gem::Dependency
135
177
  prerelease: false
136
178
  type: :development
137
179
  name: jeweler
138
- version_requirements: &id008 !ruby/object:Gem::Requirement
180
+ version_requirements: &id011 !ruby/object:Gem::Requirement
139
181
  none: false
140
182
  requirements:
141
183
  - - ~>
@@ -147,12 +189,12 @@ dependencies:
147
189
  - 0
148
190
  - pre3
149
191
  version: 1.5.0.pre3
150
- requirement: *id008
192
+ requirement: *id011
151
193
  - !ruby/object:Gem::Dependency
152
194
  prerelease: false
153
195
  type: :development
154
196
  name: rcov
155
- version_requirements: &id009 !ruby/object:Gem::Requirement
197
+ version_requirements: &id012 !ruby/object:Gem::Requirement
156
198
  none: false
157
199
  requirements:
158
200
  - - ">="
@@ -161,7 +203,7 @@ dependencies:
161
203
  segments:
162
204
  - 0
163
205
  version: "0"
164
- requirement: *id009
206
+ requirement: *id012
165
207
  description: RubyGem to track long running processes.
166
208
  email: tobias.schwab@dynport.de
167
209
  executables: []
@@ -172,6 +214,7 @@ extra_rdoc_files:
172
214
  - LICENSE
173
215
  - README.rdoc
174
216
  files:
217
+ - .autotest
175
218
  - .bundle/config
176
219
  - .rspec
177
220
  - Gemfile
@@ -180,11 +223,11 @@ files:
180
223
  - README.rdoc
181
224
  - Rakefile
182
225
  - VERSION
226
+ - autotest/discover.rb
183
227
  - averager.gemspec
184
228
  - lib/averager.rb
185
229
  - spec/averager_spec.rb
186
230
  - spec/spec_helper.rb
187
- - spec/time_travel.rb
188
231
  has_rdoc: true
189
232
  homepage: http://github.com/tobstarr/averager
190
233
  licenses: []
@@ -222,4 +265,3 @@ summary: RubyGem to track long running processes.
222
265
  test_files:
223
266
  - spec/averager_spec.rb
224
267
  - spec/spec_helper.rb
225
- - spec/time_travel.rb
@@ -1,30 +0,0 @@
1
- module TimeTravel
2
- @@offset = 0
3
- @@frozen_time = nil
4
-
5
- def self.now
6
- if @@frozen_time
7
- @@frozen_time + offset
8
- else
9
- Time.now_without_time_travel + offset
10
- end
11
- end
12
-
13
- def self.freeze_to(time)
14
- @@frozen_time = time
15
- end
16
-
17
- def self.jump(seconds)
18
- @@offset = offset + seconds
19
- end
20
-
21
- def self.offset
22
- @@offset
23
- end
24
- end
25
-
26
-
27
- class << Time
28
- alias_method :now_without_time_travel, :now
29
- def now; TimeTravel.now; end
30
- end