clockblock 0.0.1 → 0.0.2
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/README.md +91 -2
- data/lib/clockblock.rb +1 -0
- data/lib/clockblock/timing.rb +50 -0
- data/lib/clockblock/version.rb +1 -1
- metadata +10 -9
data/README.md
CHANGED
@@ -1,4 +1,93 @@
|
|
1
|
-
|
1
|
+
ClockBlock
|
2
2
|
==========
|
3
3
|
|
4
|
-
Wrap your code in a Clock Block to measure execution duration.
|
4
|
+
Wrap your code in a Clock Block to measure execution duration.
|
5
|
+
|
6
|
+
````ruby
|
7
|
+
require 'clockblock'
|
8
|
+
|
9
|
+
class Foo
|
10
|
+
extend Clockblock::Timing
|
11
|
+
|
12
|
+
def bar
|
13
|
+
sleep 2
|
14
|
+
end
|
15
|
+
add_timing_to :bar
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
f = Foo.new
|
20
|
+
f.bar
|
21
|
+
|
22
|
+
f.clockblock_timers
|
23
|
+
# => {:bar=>{:started_at=>2012-07-26 16:04:03 -0400, :finished_at=>2012-07-26 16:04:05 -0400, :duration=>2.001059, :stage=>:finished}}
|
24
|
+
|
25
|
+
````
|
26
|
+
|
27
|
+
````ruby
|
28
|
+
require 'clockblock'
|
29
|
+
|
30
|
+
class Foo
|
31
|
+
def bar
|
32
|
+
sleep 2
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
f = Foo.new
|
37
|
+
f.extend Clockblock::Timing
|
38
|
+
f.add_timing_to :bar
|
39
|
+
f.bar
|
40
|
+
|
41
|
+
f.clockblock_timers
|
42
|
+
# => {:bar=>{:started_at=>2012-07-26 16:04:03 -0400, :finished_at=>2012-07-26 16:04:05 -0400, :duration=>2.001059, :stage=>:finished}}
|
43
|
+
|
44
|
+
````
|
45
|
+
|
46
|
+
````ruby
|
47
|
+
class Foo1
|
48
|
+
extend Clockblock::Timing
|
49
|
+
add_timing_to :baz
|
50
|
+
|
51
|
+
def bar
|
52
|
+
sleep 1
|
53
|
+
end
|
54
|
+
add_timing_to :bar
|
55
|
+
|
56
|
+
def baz
|
57
|
+
sleep 1
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class Foo2
|
62
|
+
def bar
|
63
|
+
sleep 1
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class Foo3
|
68
|
+
def bar
|
69
|
+
sleep 1
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
f1 = Foo1.new
|
74
|
+
f1.bar
|
75
|
+
puts f1.clockblock_timers
|
76
|
+
puts Foo1.instance_variable_get(:@future_timer_methods)
|
77
|
+
|
78
|
+
f2 = Foo2.new
|
79
|
+
f2.extend Clockblock::Timing
|
80
|
+
f2.add_timing_to :bar, :baz
|
81
|
+
f2.bar
|
82
|
+
puts f2.clockblock_timers
|
83
|
+
puts f2.instance_variable_get(:@future_timer_methods)
|
84
|
+
|
85
|
+
Foo3.extend Clockblock::Timing
|
86
|
+
Foo3.add_timing_to :bar, :baz
|
87
|
+
puts Foo3.instance_variable_get(:@future_timer_methods)
|
88
|
+
class Foo3; def baz; sleep 1; end; end
|
89
|
+
f3 = Foo3.new
|
90
|
+
f3.bar
|
91
|
+
f3.baz
|
92
|
+
puts f3.clockblock_timers
|
93
|
+
````
|
data/lib/clockblock.rb
CHANGED
@@ -0,0 +1,50 @@
|
|
1
|
+
module Clockblock
|
2
|
+
module Timing
|
3
|
+
|
4
|
+
module ClassMethods
|
5
|
+
def add_timing_to *methods
|
6
|
+
methods.each do |method|
|
7
|
+
klass = self.is_a?(Class) ? self : (class << self; self; end)
|
8
|
+
if klass.method_defined? method
|
9
|
+
add_timing_to_method method, klass
|
10
|
+
else
|
11
|
+
@future_timer_methods ||= []
|
12
|
+
@future_timer_methods << method
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_timing_to_method(method, klass)
|
18
|
+
stashed_method = "#{method}_stashed_by_clockblock".to_sym
|
19
|
+
klass.class_eval do
|
20
|
+
alias_method stashed_method, method
|
21
|
+
define_method method do |*args, &block|
|
22
|
+
@clockblock_timers ||= {}
|
23
|
+
@clockblock_timers[method] = Clockblock::Timer.new
|
24
|
+
|
25
|
+
@clockblock_timers[method].clock(method) do
|
26
|
+
send stashed_method, *args, &block
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def method_added(method)
|
33
|
+
if @future_timer_methods && @future_timer_methods.include?(method)
|
34
|
+
unless @added_by_clockblock
|
35
|
+
@added_by_clockblock = true
|
36
|
+
klass = self.is_a?(Class) ? self : (class << self; self; end)
|
37
|
+
add_timing_to_method method, klass
|
38
|
+
end
|
39
|
+
@added_by_clockblock = false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.extended(base)
|
45
|
+
(base.is_a?(Class) ? base : base.class).send :attr_accessor, :clockblock_timers, :future_timer_methods
|
46
|
+
base.send :extend, ClassMethods
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
data/lib/clockblock/version.rb
CHANGED
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.2
|
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-
|
12
|
+
date: 2012-07-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70341854789020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70341854789020
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: minitest
|
27
|
-
requirement: &
|
27
|
+
requirement: &70341854773700 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70341854773700
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: turn
|
38
|
-
requirement: &
|
38
|
+
requirement: &70341854772740 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70341854772740
|
47
47
|
description: Enables easy and DRY code timing capabilities.
|
48
48
|
email:
|
49
49
|
- jack.ross@technekes.com
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- clockblock.gemspec
|
60
60
|
- lib/clockblock.rb
|
61
61
|
- lib/clockblock/timer.rb
|
62
|
+
- lib/clockblock/timing.rb
|
62
63
|
- lib/clockblock/version.rb
|
63
64
|
- spec/lib/clockblock/timer_spec.rb
|
64
65
|
- spec/spec_helper.rb
|
@@ -82,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
83
|
version: '0'
|
83
84
|
requirements: []
|
84
85
|
rubyforge_project:
|
85
|
-
rubygems_version: 1.8.
|
86
|
+
rubygems_version: 1.8.17
|
86
87
|
signing_key:
|
87
88
|
specification_version: 3
|
88
89
|
summary: Wrap your code in a Clock Block to measure execution duration.
|