clockblock 0.0.2 → 0.0.3

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.
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - jruby-19mode # JRuby in 1.9 mode
6
+ - rbx-19mode
7
+ # uncomment this line if your project needs to run something other than `rake`:
8
+ # script: bundle exec rspec spec
data/README.md CHANGED
@@ -1,29 +1,35 @@
1
- ClockBlock
1
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/jackross/clockblock)
2
+ [![Build Status](https://secure.travis-ci.org/jackross/clockblock.png)](http://travis-ci.org/jackross/clockblock)
3
+
4
+
5
+ Clockblock
2
6
  ==========
3
7
 
4
- Wrap your code in a Clock Block to measure execution duration.
8
+ Extend Clockblock::Timing in your class definition to add timers to your methods:
5
9
 
6
10
  ````ruby
7
11
  require 'clockblock'
8
12
 
9
13
  class Foo
10
14
  extend Clockblock::Timing
15
+ add_timing_to :bar
11
16
 
12
17
  def bar
13
18
  sleep 2
14
19
  end
15
- add_timing_to :bar
16
20
 
17
21
  end
18
22
 
19
23
  f = Foo.new
20
24
  f.bar
21
25
 
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}}
26
+ f.clockblock_timers[:bar]
27
+ # => {:started_at=>2012-07-26 16:04:03 -0400, :finished_at=>2012-07-26 16:04:05 -0400, :duration=>2.001059, :stage=>:finished}
24
28
 
25
29
  ````
26
30
 
31
+ Extend your instances with Clockblock::Timing to add timers to your methods:
32
+
27
33
  ````ruby
28
34
  require 'clockblock'
29
35
 
@@ -38,56 +44,50 @@ f.extend Clockblock::Timing
38
44
  f.add_timing_to :bar
39
45
  f.bar
40
46
 
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}}
47
+ f.clockblock_timers[:bar]
48
+ # => {:started_at=>2012-07-26 16:04:03 -0400, :finished_at=>2012-07-26 16:04:05 -0400, :duration=>2.001059, :stage=>:finished}
43
49
 
44
50
  ````
45
51
 
52
+ Extend your classes with Clockblock::Timing to add timers to your methods:
53
+
46
54
  ````ruby
47
- class Foo1
48
- extend Clockblock::Timing
49
- add_timing_to :baz
55
+ require 'clockblock'
50
56
 
57
+ class Foo
51
58
  def bar
52
- sleep 1
53
- end
54
- add_timing_to :bar
55
-
56
- def baz
57
- sleep 1
59
+ sleep 2
58
60
  end
59
61
  end
60
62
 
61
- class Foo2
62
- def bar
63
- sleep 1
64
- end
65
- end
63
+ Foo.extend Clockblock::Timing
64
+ Foo.add_timing_to :bar, :baz
65
+ puts Foo.instance_variable_get(:@future_timer_methods)
66
+ class Foo; def baz; sleep 1; end; end
67
+ f = Foo.new
68
+ f.bar
69
+ f.baz
70
+ puts f.clockblock_timers
71
+ # => {:bar=>{:started_at=>2012-07-30 10:43:48 -0400, :finished_at=>2012-07-30 10:43:49 -0400, :duration=>1.0004, :stage=>:finished}, :baz=>{:started_at=>2012-07-30 10:43:49 -0400, :finished_at=>2012-07-30 10:43:50 -0400, :duration=>1.000906, :stage=>:finished}}
72
+
73
+ ````
74
+
75
+ Wrap your code in a Clockblock clock block to measure execution duration.
76
+
77
+ ````ruby
78
+ require 'clockblock'
79
+
80
+ class Foo
66
81
 
67
- class Foo3
68
82
  def bar
69
- sleep 1
83
+ t = Clockblock::Timer.new
84
+ result = t.clock do
85
+ sleep 2 # replace 'sleep 2' with your code!
86
+ end
87
+ puts t.attributes
88
+ result
70
89
  end
71
90
  end
72
91
 
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
- ````
92
+ ````
93
+
@@ -1,22 +1,23 @@
1
1
  module Clockblock
2
2
  class Timer
3
- attr_reader :started_at, :finished_at, :stage
3
+ attr_reader :started_at, :finished_at, :stage, :clockblock_result
4
4
 
5
5
  def initialize(opts = {})
6
6
  @stage = :initialized
7
+ yield self if block_given?
7
8
  end
8
9
 
9
10
  def clock(name = "Anonymous Timer")
10
11
  begin
11
12
  start
12
13
  @stage = :executing
13
- result = yield
14
+ @clockblock_result = yield
14
15
  stop
15
16
  rescue => ex
16
17
  @stage = :error
17
18
  raise TimerException.new("Error while executing '#{name}': '#{ex.message}'!")
18
19
  end
19
- result
20
+ @clockblock_result
20
21
  end
21
22
 
22
23
  def start
@@ -47,11 +48,11 @@ module Clockblock
47
48
  end
48
49
 
49
50
  def inspect
50
- attributes
51
+ to_s
51
52
  end
52
53
 
53
54
  def to_s
54
- attributes
55
+ attributes.to_s
55
56
  end
56
57
 
57
58
  class TimerException < Exception
@@ -2,11 +2,14 @@ module Clockblock
2
2
  module Timing
3
3
 
4
4
  module ClassMethods
5
+ def receiver
6
+ self.is_a?(Class) ? self : (class << self; self; end)
7
+ end
8
+
5
9
  def add_timing_to *methods
6
10
  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
11
+ if receiver.method_defined? method
12
+ add_timing_to_method method
10
13
  else
11
14
  @future_timer_methods ||= []
12
15
  @future_timer_methods << method
@@ -14,9 +17,19 @@ module Clockblock
14
17
  end
15
18
  end
16
19
 
17
- def add_timing_to_method(method, klass)
20
+ def method_added(method)
21
+ if @future_timer_methods && @future_timer_methods.include?(method)
22
+ unless @added_by_clockblock
23
+ @added_by_clockblock = true
24
+ add_timing_to_method method
25
+ end
26
+ @added_by_clockblock = false
27
+ end
28
+ end
29
+
30
+ def add_timing_to_method(method)
18
31
  stashed_method = "#{method}_stashed_by_clockblock".to_sym
19
- klass.class_eval do
32
+ receiver.class_eval do
20
33
  alias_method stashed_method, method
21
34
  define_method method do |*args, &block|
22
35
  @clockblock_timers ||= {}
@@ -28,17 +41,6 @@ module Clockblock
28
41
  end
29
42
  end
30
43
  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
44
  end
43
45
 
44
46
  def self.extended(base)
@@ -1,3 +1,3 @@
1
1
  module Clockblock
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,4 +1,4 @@
1
- require_relative '../../spec_helper'
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
2
 
3
3
  describe Clockblock::Timer do
4
4
 
@@ -0,0 +1,43 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "extending Clockblock::Timing in a class definition" do
4
+ it "wraps an already defined method in a clock block" do
5
+
6
+ foo_klass = Class.new do
7
+ extend Clockblock::Timing
8
+
9
+ def bar
10
+ sleep 1
11
+ end
12
+ add_timing_to :bar
13
+
14
+ end
15
+
16
+ f = foo_klass.new
17
+ f.bar.must_equal 1
18
+ f.clockblock_timers.must_be_kind_of Hash
19
+ f.clockblock_timers.keys.must_include :bar
20
+ f.clockblock_timers[:bar].must_be_instance_of Clockblock::Timer
21
+
22
+ end
23
+
24
+ it "wraps an undefined method in a clock block" do
25
+
26
+ foo_klass = Class.new do
27
+ extend Clockblock::Timing
28
+ add_timing_to :bar
29
+
30
+ def bar
31
+ sleep 1
32
+ end
33
+
34
+ end
35
+
36
+ f = foo_klass.new
37
+ f.bar.must_equal 1
38
+ f.clockblock_timers.must_be_kind_of Hash
39
+ f.clockblock_timers.keys.must_include :bar
40
+ f.clockblock_timers[:bar].must_be_instance_of Clockblock::Timer
41
+
42
+ end
43
+ end
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.2
4
+ version: 0.0.3
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-27 00:00:00.000000000 Z
12
+ date: 2012-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70341854789020 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70341854789020
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: minitest
27
- requirement: &70341854773700 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70341854773700
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: turn
38
- requirement: &70341854772740 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,7 +53,12 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70341854772740
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  description: Enables easy and DRY code timing capabilities.
48
63
  email:
49
64
  - jack.ross@technekes.com
@@ -52,6 +67,7 @@ extensions: []
52
67
  extra_rdoc_files: []
53
68
  files:
54
69
  - .gitignore
70
+ - .travis.yml
55
71
  - Gemfile
56
72
  - LICENSE
57
73
  - README.md
@@ -62,6 +78,7 @@ files:
62
78
  - lib/clockblock/timing.rb
63
79
  - lib/clockblock/version.rb
64
80
  - spec/lib/clockblock/timer_spec.rb
81
+ - spec/lib/clockblock/timing_spec.rb
65
82
  - spec/spec_helper.rb
66
83
  homepage: ''
67
84
  licenses: []
@@ -83,10 +100,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
100
  version: '0'
84
101
  requirements: []
85
102
  rubyforge_project:
86
- rubygems_version: 1.8.17
103
+ rubygems_version: 1.8.24
87
104
  signing_key:
88
105
  specification_version: 3
89
106
  summary: Wrap your code in a Clock Block to measure execution duration.
90
107
  test_files:
91
108
  - spec/lib/clockblock/timer_spec.rb
109
+ - spec/lib/clockblock/timing_spec.rb
92
110
  - spec/spec_helper.rb