allotment 0.0.1 → 1.0.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.
- 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:
|