clockblock 0.0.5 → 0.0.6
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.
- data/lib/clockblock/timing.rb +14 -10
- data/lib/clockblock/version.rb +1 -1
- data/spec/lib/clockblock/timing_spec.rb +14 -44
- metadata +9 -24
data/lib/clockblock/timing.rb
CHANGED
@@ -1,13 +1,19 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module Clockblock
|
2
4
|
module Timing
|
3
5
|
|
4
6
|
module ClassMethods
|
5
7
|
def receiver
|
6
|
-
self.is_a?(Class) ? self : self.singleton_class
|
8
|
+
self.is_a?(Class) ? self : self.singleton_class
|
9
|
+
end
|
10
|
+
|
11
|
+
def stashed_method_name_for(method)
|
12
|
+
"#{method}_stashed_by_clockblock".to_sym
|
7
13
|
end
|
8
14
|
|
9
15
|
def add_timing_to_method(method)
|
10
|
-
stashed_method =
|
16
|
+
stashed_method = stashed_method_name_for method
|
11
17
|
receiver.class_eval do
|
12
18
|
alias_method stashed_method, method
|
13
19
|
define_method method do |*args, &block|
|
@@ -23,22 +29,20 @@ module Clockblock
|
|
23
29
|
|
24
30
|
def add_timing_to *methods
|
25
31
|
methods.each do |method|
|
26
|
-
if receiver.method_defined? method
|
32
|
+
if receiver.method_defined?(method) && !receiver.method_defined?(stashed_method_name_for(method))
|
27
33
|
add_timing_to_method method
|
28
34
|
else
|
29
|
-
@future_timer_methods ||=
|
35
|
+
@future_timer_methods ||= Set.new
|
30
36
|
@future_timer_methods << method
|
31
37
|
end
|
32
38
|
end
|
33
39
|
end
|
34
40
|
|
35
41
|
def future_method_added(method)
|
36
|
-
if @future_timer_methods && @future_timer_methods.include?(method)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
add_timing_to_method method
|
41
|
-
end
|
42
|
+
if !@added_by_clockblock && @future_timer_methods && @future_timer_methods.include?(method)
|
43
|
+
@added_by_clockblock = true
|
44
|
+
@future_timer_methods.subtract [method]
|
45
|
+
add_timing_to_method method
|
42
46
|
@added_by_clockblock = false
|
43
47
|
end
|
44
48
|
end
|
data/lib/clockblock/version.rb
CHANGED
@@ -19,11 +19,8 @@ describe Clockblock::Timing do
|
|
19
19
|
foo_klass = Class.new do
|
20
20
|
extend Clockblock::Timing
|
21
21
|
|
22
|
-
def bar(ret_val)
|
23
|
-
sleep 0.1; ret_val
|
24
|
-
end
|
22
|
+
def bar(ret_val); sleep 0.1; ret_val; end
|
25
23
|
add_timing_to :bar
|
26
|
-
|
27
24
|
end
|
28
25
|
|
29
26
|
run_timing_specs_on foo_klass.new, :bar
|
@@ -36,10 +33,7 @@ describe Clockblock::Timing do
|
|
36
33
|
extend Clockblock::Timing
|
37
34
|
add_timing_to :bar
|
38
35
|
|
39
|
-
def bar(ret_val)
|
40
|
-
sleep 0.1; ret_val
|
41
|
-
end
|
42
|
-
|
36
|
+
def bar(ret_val); sleep 0.1; ret_val; end
|
43
37
|
end
|
44
38
|
|
45
39
|
run_timing_specs_on foo_klass.new, :bar
|
@@ -52,14 +46,8 @@ describe Clockblock::Timing do
|
|
52
46
|
extend Clockblock::Timing
|
53
47
|
add_timing_to :bar, :baz
|
54
48
|
|
55
|
-
def bar(ret_val)
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
def baz(ret_val)
|
60
|
-
sleep 0.1; ret_val
|
61
|
-
end
|
62
|
-
|
49
|
+
def bar(ret_val); sleep 0.1; ret_val; end
|
50
|
+
def baz(ret_val); sleep 0.1; ret_val; end
|
63
51
|
end
|
64
52
|
|
65
53
|
run_timing_specs_on foo_klass.new, :bar, :baz
|
@@ -71,14 +59,9 @@ describe Clockblock::Timing do
|
|
71
59
|
foo_klass = Class.new do
|
72
60
|
extend Clockblock::Timing
|
73
61
|
add_timing_to :bar
|
74
|
-
|
75
62
|
end
|
76
63
|
|
77
|
-
foo_klass.class_eval
|
78
|
-
def bar(ret_val)
|
79
|
-
sleep 0.1; ret_val
|
80
|
-
end
|
81
|
-
end
|
64
|
+
foo_klass.class_eval{ def bar(ret_val); sleep 0.1; ret_val; end }
|
82
65
|
|
83
66
|
run_timing_specs_on foo_klass.new, :bar
|
84
67
|
|
@@ -86,27 +69,21 @@ describe Clockblock::Timing do
|
|
86
69
|
|
87
70
|
it "class can be extended 'after the fact' and still wrap a method defined in a clock block" do
|
88
71
|
|
89
|
-
foo_klass_a = Class.new
|
90
|
-
|
91
|
-
sleep 0.1; ret_val
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
foo_klass_b = Class.new do
|
96
|
-
def bar(ret_val)
|
97
|
-
sleep 0.1; ret_val
|
98
|
-
end
|
99
|
-
end
|
72
|
+
foo_klass_a = Class.new{ def bar(ret_val); sleep 0.1; ret_val; end }
|
73
|
+
foo_klass_b = Class.new{ def bar(ret_val); sleep 0.1; ret_val; end }
|
100
74
|
|
75
|
+
# try it one way
|
101
76
|
foo_klass_a.class_eval do
|
102
77
|
extend Clockblock::Timing
|
103
78
|
add_timing_to :bar
|
104
79
|
end
|
105
80
|
|
81
|
+
run_timing_specs_on foo_klass_a.new, :bar
|
82
|
+
|
83
|
+
# try it the other way
|
106
84
|
foo_klass_b.extend Clockblock::Timing
|
107
85
|
foo_klass_b.add_timing_to :bar
|
108
86
|
|
109
|
-
run_timing_specs_on foo_klass_a.new, :bar
|
110
87
|
run_timing_specs_on foo_klass_b.new, :bar
|
111
88
|
|
112
89
|
end
|
@@ -116,11 +93,7 @@ describe Clockblock::Timing do
|
|
116
93
|
|
117
94
|
it "wraps a defined method in a clock block" do
|
118
95
|
|
119
|
-
foo_klass = Class.new
|
120
|
-
def bar(ret_val)
|
121
|
-
sleep 0.1; ret_val
|
122
|
-
end
|
123
|
-
end
|
96
|
+
foo_klass = Class.new{ def bar(ret_val); sleep 0.1; ret_val; end }
|
124
97
|
|
125
98
|
f = foo_klass.new
|
126
99
|
f.extend Clockblock::Timing
|
@@ -132,16 +105,13 @@ describe Clockblock::Timing do
|
|
132
105
|
|
133
106
|
it "eventually wraps an undefined method in a clock block" do
|
134
107
|
|
135
|
-
foo_klass = Class.new
|
136
|
-
end
|
108
|
+
foo_klass = Class.new
|
137
109
|
|
138
110
|
f = foo_klass.new
|
139
111
|
f.extend Clockblock::Timing
|
140
112
|
f.add_timing_to :bar
|
141
113
|
|
142
|
-
def f.bar(ret_val)
|
143
|
-
sleep 0.1; ret_val
|
144
|
-
end
|
114
|
+
def f.bar(ret_val); sleep 0.1; ret_val; end
|
145
115
|
|
146
116
|
run_timing_specs_on f, :bar
|
147
117
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clockblock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70121750447240 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
24
|
+
version_requirements: *70121750447240
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: minitest
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70121750445980 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ! '>='
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: '0'
|
38
33
|
type: :development
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
35
|
+
version_requirements: *70121750445980
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: turn
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70121750445100 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ! '>='
|
@@ -53,12 +43,7 @@ dependencies:
|
|
53
43
|
version: '0'
|
54
44
|
type: :development
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
46
|
+
version_requirements: *70121750445100
|
62
47
|
description: Enables easy and DRY code timing capabilities.
|
63
48
|
email:
|
64
49
|
- jack.ross@technekes.com
|
@@ -100,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
85
|
version: '0'
|
101
86
|
requirements: []
|
102
87
|
rubyforge_project:
|
103
|
-
rubygems_version: 1.8.
|
88
|
+
rubygems_version: 1.8.15
|
104
89
|
signing_key:
|
105
90
|
specification_version: 3
|
106
91
|
summary: Wrap your code in a Clock Block to measure execution duration.
|