allotment 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/allotment.rb +22 -14
- data/lib/allotment/array.rb +5 -0
- data/lib/allotment/cucumber.rb +13 -0
- data/lib/allotment/stopwatch.rb +37 -0
- data/spec/allotment_spec.rb +87 -37
- data/spec/helper.rb +9 -0
- data/spec/stopwatch/array_spec.rb +15 -0
- data/spec/stopwatch/stopwatch_spec.rb +122 -0
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45adf43db853faac34a57e8be2b94914c4708e35
|
4
|
+
data.tar.gz: cfdc29f2a8949df3ba3630e314e735f7b1b1d3d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc352f7d58035999eaa90c1b591d6f33e139d25ff1d99e93df51b19da7f498a706bbe8171a47c117507eebbf20900a08fa34f1e1999731d0c1185cdc986893bf
|
7
|
+
data.tar.gz: 9c3e98e45a41f40fed4e52a906e1994e2d251303c76ec96f889d498aeab5c9a94f4e5a368f539b5c94d8bc9e7689a8cb45e43b20d4581e6ffa88291f7915c9b7
|
data/lib/allotment.rb
CHANGED
@@ -1,30 +1,38 @@
|
|
1
|
+
require 'allotment/array'
|
2
|
+
require 'allotment/stopwatch'
|
3
|
+
require 'json'
|
4
|
+
|
1
5
|
module Allotment
|
2
6
|
class << self
|
3
|
-
def record_event name =
|
4
|
-
|
7
|
+
def record_event name = 'unnamed', &block
|
8
|
+
start_recording name
|
5
9
|
yield
|
6
|
-
|
10
|
+
stop_recording name
|
7
11
|
end
|
8
12
|
|
9
|
-
def start_recording name =
|
13
|
+
def start_recording name = 'unnamed'
|
10
14
|
@watches ||= Hash.new
|
11
15
|
@watches[name] = Stopwatch.new name
|
12
|
-
@watches[name]
|
13
16
|
end
|
14
17
|
|
15
18
|
def stop_recording name
|
16
|
-
watch = @watches.delete(name) {|
|
17
|
-
|
19
|
+
watch = @watches.delete(name) { |n| raise NameError, "No recording:" + n }
|
20
|
+
result = watch.stop
|
21
|
+
|
22
|
+
# Dealing with the results
|
23
|
+
@results ||= Hash.new
|
24
|
+
@results[name] ||= Array.new
|
25
|
+
@results[name].push result
|
26
|
+
|
27
|
+
return result
|
18
28
|
end
|
19
|
-
end
|
20
29
|
|
21
|
-
|
22
|
-
|
30
|
+
def results
|
31
|
+
@results
|
32
|
+
end
|
23
33
|
|
24
|
-
def
|
25
|
-
@
|
26
|
-
@status = 'running'
|
27
|
-
@start_time = Time.now
|
34
|
+
def results_string
|
35
|
+
JSON.pretty_generate @results
|
28
36
|
end
|
29
37
|
end
|
30
38
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'allotment/stopwatch'
|
2
|
+
|
3
|
+
module Allotment
|
4
|
+
class Stopwatch
|
5
|
+
attr_reader :name, :status, :start_time
|
6
|
+
|
7
|
+
def initialize name = self.class.uniqe_name
|
8
|
+
@name = name
|
9
|
+
@status = 'running'
|
10
|
+
@start_time = Time.now
|
11
|
+
end
|
12
|
+
|
13
|
+
def start
|
14
|
+
@start_time = Time.now - (@current_time || 0)
|
15
|
+
@status = 'running'
|
16
|
+
end
|
17
|
+
|
18
|
+
def stop
|
19
|
+
@status = 'stopped'
|
20
|
+
@current_time = Time.now - @start_time
|
21
|
+
end
|
22
|
+
|
23
|
+
def reset
|
24
|
+
@start_time = Time.now
|
25
|
+
@current_time = 0
|
26
|
+
end
|
27
|
+
|
28
|
+
def lap
|
29
|
+
Time.now - @start_time
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
def self.uniqe_name
|
34
|
+
"stopwatch_" + (@id ? @id += 1 : @id = 0).to_s
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/spec/allotment_spec.rb
CHANGED
@@ -1,52 +1,102 @@
|
|
1
|
-
require '
|
2
|
-
Coveralls.wear!
|
1
|
+
require 'helper'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
it "records the time for the block" do
|
8
|
-
Allotment.record_event('name') { nil }
|
3
|
+
describe Allotment do
|
4
|
+
it "is a module" do
|
5
|
+
Allotment.class.should eq Module
|
9
6
|
end
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
describe ".record_event" do
|
9
|
+
it "records the time for the block" do
|
10
|
+
Allotment.record_event('my_recording0') { sleep 0.01 }
|
11
|
+
end
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
13
|
+
it "returns a float" do
|
14
|
+
result = Allotment.record_event('my_recording0') { sleep 0.01 }
|
15
|
+
result.class.should eq Float
|
16
|
+
end
|
21
17
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
it "returns the execute time of the block" do
|
19
|
+
result = Allotment.record_event('my_recording0') { sleep 0.01 }
|
20
|
+
result.round(2).should eq 0.01
|
21
|
+
end
|
26
22
|
end
|
27
23
|
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
describe ".start_recording" do
|
25
|
+
it "returns a stopwatch instance" do
|
26
|
+
result = Allotment.start_recording
|
27
|
+
result.class.should eq Allotment::Stopwatch
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns an unnamed stopwatch if no name given" do
|
31
|
+
result = Allotment.start_recording
|
32
|
+
result.name.should eq 'unnamed'
|
33
|
+
end
|
34
|
+
|
35
|
+
it "returns a stopwatch with the given name" do
|
36
|
+
result = Allotment.start_recording 'my_recording'
|
37
|
+
result.name.should eq 'my_recording'
|
38
|
+
end
|
39
|
+
|
40
|
+
it "returns a stopwatch that is 'running'" do
|
41
|
+
result = Allotment.start_recording
|
42
|
+
result.status.should eq 'running'
|
43
|
+
end
|
31
44
|
end
|
32
45
|
|
33
|
-
|
34
|
-
|
35
|
-
|
46
|
+
describe ".stop_recording" do
|
47
|
+
it "returns a float" do
|
48
|
+
Allotment.start_recording 'my_recording1'
|
49
|
+
sleep 0.01
|
50
|
+
result = Allotment.stop_recording 'my_recording1'
|
51
|
+
result.class.should eq Float
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns the execute time of the code" do
|
55
|
+
Allotment.start_recording 'my_recording2'
|
56
|
+
sleep 0.01
|
57
|
+
result = Allotment.stop_recording 'my_recording2'
|
58
|
+
result.round(2).should eq 0.01
|
59
|
+
end
|
60
|
+
|
61
|
+
it "raises an error if the recording does not exist" do
|
62
|
+
expect { Allotment.stop_recording 'my_recording3' }.to raise_error NameError, "No recording:my_recording3"
|
63
|
+
end
|
36
64
|
end
|
37
|
-
end
|
38
65
|
|
39
|
-
describe
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
66
|
+
describe ".results" do
|
67
|
+
it "returns a hash" do
|
68
|
+
Allotment.record_event('my_recording4') { sleep 0.01 }
|
69
|
+
Allotment.results.class.should eq Hash
|
70
|
+
end
|
71
|
+
|
72
|
+
it "returns a hash with the event in" do
|
73
|
+
Allotment.record_event('my_recording5') { sleep 0.01 }
|
74
|
+
Allotment.results.should include('my_recording5')
|
75
|
+
end
|
76
|
+
|
77
|
+
it "stores the result under the event" do
|
78
|
+
Allotment.record_event('my_recording6') { sleep 0.01 }
|
79
|
+
Allotment.results['my_recording6'][0].round(2).should eq 0.01
|
80
|
+
end
|
81
|
+
|
82
|
+
it "stores each result of each event" do
|
83
|
+
Allotment.record_event('my_recording7') { sleep 0.01 }
|
84
|
+
Allotment.record_event('my_recording7') { sleep 0.02 }
|
85
|
+
Allotment.results['my_recording7'][0].round(2).should eq 0.01
|
86
|
+
Allotment.results['my_recording7'][1].round(2).should eq 0.02
|
87
|
+
end
|
44
88
|
end
|
45
89
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
90
|
+
describe ".results_string" do
|
91
|
+
it "returns a string" do
|
92
|
+
Allotment.record_event('my_recording8') { sleep 0.01 }
|
93
|
+
Allotment.results_string.class.should eq String
|
94
|
+
end
|
95
|
+
|
96
|
+
it "returns a string with the event in" do
|
97
|
+
Allotment.record_event('my_recording9') { sleep 0.03 }
|
98
|
+
Allotment.results_string.should include('my_recording9')
|
99
|
+
Allotment.results_string.should include('0.03')
|
100
|
+
end
|
51
101
|
end
|
52
102
|
end
|
data/spec/helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
describe Array do
|
2
|
+
describe "#average" do
|
3
|
+
it "returns a float" do
|
4
|
+
[1,2,3,4,5].average.class.should eq Float
|
5
|
+
end
|
6
|
+
|
7
|
+
it "returns the mean of the array" do
|
8
|
+
[1,2,3,4,5,6,7,7].average.should eq 4.375
|
9
|
+
end
|
10
|
+
|
11
|
+
it "raises an error if one of the values is not a fixnum" do
|
12
|
+
expect { [1,2,3,4,5,'invalid'].average }.to raise_error TypeError, "String can't be coerced into Fixnum"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
describe Allotment::Stopwatch do
|
2
|
+
it "is a class" do
|
3
|
+
Allotment::Stopwatch.class.should eq Class
|
4
|
+
end
|
5
|
+
|
6
|
+
describe ".new" do
|
7
|
+
it "returns a class of Stopwatch" do
|
8
|
+
Allotment::Stopwatch.new.class.should eq Allotment::Stopwatch
|
9
|
+
end
|
10
|
+
|
11
|
+
it "sets the stopwatch status to running" do
|
12
|
+
Allotment::Stopwatch.new.status.should eq 'running'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "gives the stopwatch a name if none given" do
|
16
|
+
Allotment::Stopwatch.new.name.should =~ /stopwatch_\d+/
|
17
|
+
end
|
18
|
+
|
19
|
+
it "sets the name of the stopwatch" do
|
20
|
+
Allotment::Stopwatch.new('stopwatch').name.should eq 'stopwatch'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#stop" do
|
25
|
+
it "returns a float" do
|
26
|
+
sw = Allotment::Stopwatch.new
|
27
|
+
sw.stop.class.should eq Float
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns the correct time" do
|
31
|
+
sw = Allotment::Stopwatch.new
|
32
|
+
sleep 0.01
|
33
|
+
sw.stop.round(2).should eq 0.01
|
34
|
+
end
|
35
|
+
|
36
|
+
it "sets the stopwatch status to stopped" do
|
37
|
+
sw = Allotment::Stopwatch.new
|
38
|
+
sw.stop
|
39
|
+
sw.status.should eq 'stopped'
|
40
|
+
end
|
41
|
+
|
42
|
+
it "keeps its stopwatch name" do
|
43
|
+
sw = Allotment::Stopwatch.new('stopwatch')
|
44
|
+
sw.stop
|
45
|
+
sw.name.should eq 'stopwatch'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#start" do
|
50
|
+
it "sets the stopwatch status to running" do
|
51
|
+
sw = Allotment::Stopwatch.new
|
52
|
+
sw.stop
|
53
|
+
sw.start
|
54
|
+
sw.status.should eq 'running'
|
55
|
+
end
|
56
|
+
|
57
|
+
it "keeps track of total time" do
|
58
|
+
sw = Allotment::Stopwatch.new
|
59
|
+
sleep 0.01
|
60
|
+
sw.stop
|
61
|
+
sw.start
|
62
|
+
sleep 0.01
|
63
|
+
sw.stop.round(2).should eq 0.02
|
64
|
+
end
|
65
|
+
|
66
|
+
it "keeps its stopwatch name" do
|
67
|
+
sw = Allotment::Stopwatch.new('stopwatch')
|
68
|
+
sw.stop
|
69
|
+
sw.start
|
70
|
+
sw.name.should eq 'stopwatch'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#reset" do
|
75
|
+
it "resets the stopwatch total time when stopped" do
|
76
|
+
sw = Allotment::Stopwatch.new
|
77
|
+
sleep 0.01
|
78
|
+
sw.stop
|
79
|
+
sw.status.should eq 'stopped'
|
80
|
+
sw.reset
|
81
|
+
sw.start
|
82
|
+
sleep 0.01
|
83
|
+
sw.stop.round(2).should eq 0.01
|
84
|
+
end
|
85
|
+
|
86
|
+
it "resets the stopwatch total time when running" do
|
87
|
+
sw = Allotment::Stopwatch.new
|
88
|
+
sleep 0.01
|
89
|
+
sw.status.should eq 'running'
|
90
|
+
sw.reset
|
91
|
+
sleep 0.01
|
92
|
+
sw.stop.round(2).should eq 0.01
|
93
|
+
end
|
94
|
+
|
95
|
+
it "keeps its stopwatch name" do
|
96
|
+
sw = Allotment::Stopwatch.new('stopwatch')
|
97
|
+
sw.reset
|
98
|
+
sw.name.should eq 'stopwatch'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "#lap" do
|
103
|
+
it "returns a float" do
|
104
|
+
sw = Allotment::Stopwatch.new
|
105
|
+
sw.lap.class.should eq Float
|
106
|
+
end
|
107
|
+
|
108
|
+
it "returns the correct time" do
|
109
|
+
sw = Allotment::Stopwatch.new
|
110
|
+
sleep 0.01
|
111
|
+
sw.lap.round(2).should eq 0.01
|
112
|
+
sleep 0.01
|
113
|
+
sw.lap.round(2).should eq 0.02
|
114
|
+
end
|
115
|
+
|
116
|
+
it "keeps its stopwatch name" do
|
117
|
+
sw = Allotment::Stopwatch.new('stopwatch')
|
118
|
+
sw.lap
|
119
|
+
sw.name.should eq 'stopwatch'
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: allotment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Slaughter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A gem for recording performance and timings of blocks or from point to
|
14
14
|
point
|
@@ -17,8 +17,14 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
+
- lib/allotment/array.rb
|
21
|
+
- lib/allotment/cucumber.rb
|
22
|
+
- lib/allotment/stopwatch.rb
|
20
23
|
- lib/allotment.rb
|
21
24
|
- spec/allotment_spec.rb
|
25
|
+
- spec/helper.rb
|
26
|
+
- spec/stopwatch/array_spec.rb
|
27
|
+
- spec/stopwatch/stopwatch_spec.rb
|
22
28
|
homepage: https://github.com/benSlaughter/allotment
|
23
29
|
licenses:
|
24
30
|
- MIT
|
@@ -42,6 +48,10 @@ rubyforge_project:
|
|
42
48
|
rubygems_version: 2.0.3
|
43
49
|
signing_key:
|
44
50
|
specification_version: 4
|
45
|
-
summary:
|
51
|
+
summary: Performance recording
|
46
52
|
test_files:
|
47
53
|
- spec/allotment_spec.rb
|
54
|
+
- spec/helper.rb
|
55
|
+
- spec/stopwatch/array_spec.rb
|
56
|
+
- spec/stopwatch/stopwatch_spec.rb
|
57
|
+
has_rdoc:
|