clockblock 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 #(class << self; self; end)
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 = "#{method}_stashed_by_clockblock".to_sym
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
- unless @added_by_clockblock
38
- @added_by_clockblock = true
39
- @future_timer_methods -= [method]
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
@@ -1,3 +1,3 @@
1
1
  module Clockblock
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -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
- sleep 0.1; ret_val
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 do
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 do
90
- def bar(ret_val)
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 do
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 do
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.5
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-07-31 00:00:00.000000000 Z
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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.24
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.