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.
@@ -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.