busted 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/README.md +55 -2
- data/busted.gemspec +1 -0
- data/lib/busted/profiler/default.rb +4 -0
- data/lib/busted/profiler/sandwich.rb +59 -0
- data/lib/busted/profiler.rb +4 -2
- data/lib/busted/version.rb +1 -1
- data/lib/busted.rb +8 -0
- data/test/busted_test.rb +51 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 798beba5202a28ac6f4267be4c81248596a16dae
|
4
|
+
data.tar.gz: a698056e415519ddef76442a3a87c403102e3e05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b83f103bf02c10778f518bf10a6628bff8b42e98322a710bf7500ce5755f54f345162390e10c49ff0ced896746cbdda1e06f37e93a2d3bba3a10fb41d4246bb6
|
7
|
+
data.tar.gz: 455e19287871c565b23d5d5cf10f4b08c1fb49b37b50846bd8ef6e715be790014ef6d2b39767977b919daaee169671d52fca635eb5f1c3824d0a4a23a915b6cc
|
data/README.md
CHANGED
@@ -26,6 +26,12 @@ Busted.run do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
#=> {:invalidations=>{:method=>0, :constant=>1}}
|
29
|
+
|
30
|
+
Busted.start
|
31
|
+
class Pie
|
32
|
+
end
|
33
|
+
Busted.finish
|
34
|
+
#=> {:invalidations=>{:method=>0, :constant=>1}}
|
29
35
|
```
|
30
36
|
|
31
37
|
*Method Cache*
|
@@ -41,7 +47,19 @@ Busted.method_cache_invalidations do
|
|
41
47
|
def pizza
|
42
48
|
end
|
43
49
|
end
|
44
|
-
#=>
|
50
|
+
#=> 1
|
51
|
+
|
52
|
+
Busted.run do
|
53
|
+
def pie
|
54
|
+
end
|
55
|
+
end
|
56
|
+
#=> {:invalidations=>{:method=>1, :constant=>0}}
|
57
|
+
|
58
|
+
Busted.start
|
59
|
+
def smoothie
|
60
|
+
end
|
61
|
+
Busted.finish
|
62
|
+
#=> {:invalidations=>{:method=>1, :constant=>0}}
|
45
63
|
```
|
46
64
|
|
47
65
|
*Constant Cache*
|
@@ -56,6 +74,16 @@ Busted.constant_cache_invalidations do
|
|
56
74
|
CHEESE = "cheese"
|
57
75
|
end
|
58
76
|
#=> 1
|
77
|
+
|
78
|
+
Busted.run do
|
79
|
+
PIE = "pumpkin"
|
80
|
+
end
|
81
|
+
#=> {:invalidations=>{:method=>0, :constant=>1}}
|
82
|
+
|
83
|
+
Busted.start
|
84
|
+
SMOOTHIE = "blueberry"
|
85
|
+
Busted.finish
|
86
|
+
#=> {:invalidations=>{:method=>0, :constant=>1}}
|
59
87
|
```
|
60
88
|
|
61
89
|
*No Cache Busted*
|
@@ -70,6 +98,11 @@ Busted.run do
|
|
70
98
|
pizza = "pizza"
|
71
99
|
end
|
72
100
|
#=> {:invalidations=>{:method=>0, :constant=>0}}
|
101
|
+
|
102
|
+
Busted.start
|
103
|
+
pie = "pie"
|
104
|
+
Busted.finish
|
105
|
+
#=> {:invalidations=>{:method=>0, :constant=>0}}
|
73
106
|
```
|
74
107
|
|
75
108
|
## Advanced Usage
|
@@ -81,7 +114,8 @@ require "busted"
|
|
81
114
|
require "pp"
|
82
115
|
|
83
116
|
report = Busted.run(trace: true) do
|
84
|
-
def cookie
|
117
|
+
def cookie
|
118
|
+
end
|
85
119
|
end
|
86
120
|
pp report
|
87
121
|
```
|
@@ -108,6 +142,25 @@ $ ruby trace.rb
|
|
108
142
|
{:method=>[{:class=>"global", :sourcefile=>"trace.rb", :lineno=>"5"}]}}
|
109
143
|
```
|
110
144
|
|
145
|
+
*start_finish_trace.rb*
|
146
|
+
```ruby
|
147
|
+
require "busted"
|
148
|
+
require "pp"
|
149
|
+
|
150
|
+
Busted.start trace: true
|
151
|
+
def ice_cream
|
152
|
+
end
|
153
|
+
pp Busted.finish
|
154
|
+
```
|
155
|
+
|
156
|
+
```bash
|
157
|
+
$ ruby start_finish_trace.rb
|
158
|
+
{:invalidations=>{:method=>1, :constant=>0},
|
159
|
+
:traces=>
|
160
|
+
{:method=>
|
161
|
+
[{:class=>"global", :sourcefile=>"start_finish_trace.rb", :lineno=>"5"}]}}
|
162
|
+
```
|
163
|
+
|
111
164
|
Busted includes an [example `dtrace` probe](/dtrace/probes/examples/method-cache-clear.d) for use on the command line or an application. See the [probe](/dtrace/probes/examples/method-cache-clear.d) for usage.
|
112
165
|
|
113
166
|
## Installation
|
data/busted.gemspec
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
require "singleton"
|
2
|
+
|
3
|
+
module Busted
|
4
|
+
module Profiler
|
5
|
+
class Sandwich
|
6
|
+
|
7
|
+
include Singleton
|
8
|
+
|
9
|
+
include Busted::Traceable
|
10
|
+
include Busted::Countable
|
11
|
+
|
12
|
+
VALID_ACTIONS = [:start, :finish].freeze
|
13
|
+
|
14
|
+
attr_accessor :action
|
15
|
+
attr_reader :trace, :report
|
16
|
+
|
17
|
+
def self.run(options = {})
|
18
|
+
action = options.fetch :action, false
|
19
|
+
trace = options.fetch :trace, false
|
20
|
+
|
21
|
+
unless VALID_ACTIONS.include? action
|
22
|
+
fail ArgumentError, "profiler requires start or finish action"
|
23
|
+
end
|
24
|
+
|
25
|
+
sandwich = instance
|
26
|
+
|
27
|
+
sandwich.action = action
|
28
|
+
sandwich.trace = trace
|
29
|
+
sandwich.run
|
30
|
+
end
|
31
|
+
|
32
|
+
def run
|
33
|
+
send action
|
34
|
+
end
|
35
|
+
|
36
|
+
def trace=(trace)
|
37
|
+
@trace = trace if start?
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def start?
|
43
|
+
action == :start
|
44
|
+
end
|
45
|
+
|
46
|
+
def start
|
47
|
+
@report = {}
|
48
|
+
start_tracer
|
49
|
+
start_counter
|
50
|
+
end
|
51
|
+
|
52
|
+
def finish
|
53
|
+
finish_counter
|
54
|
+
finish_tracer
|
55
|
+
report
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/busted/profiler.rb
CHANGED
@@ -2,14 +2,16 @@ require "busted/counter"
|
|
2
2
|
require "busted/countable"
|
3
3
|
require "busted/tracer"
|
4
4
|
require "busted/traceable"
|
5
|
-
require "busted/profiler/default"
|
6
5
|
|
7
6
|
module Busted
|
8
7
|
module Profiler
|
9
8
|
extend self
|
10
9
|
|
10
|
+
autoload :Default, "busted/profiler/default"
|
11
|
+
autoload :Sandwich, "busted/profiler/sandwich"
|
12
|
+
|
11
13
|
def run(options, &block)
|
12
|
-
klass(options.fetch :profiler, :default).
|
14
|
+
klass(options.fetch :profiler, :default).run(options, &block)
|
13
15
|
end
|
14
16
|
|
15
17
|
private
|
data/lib/busted/version.rb
CHANGED
data/lib/busted.rb
CHANGED
@@ -7,6 +7,14 @@ module Busted
|
|
7
7
|
Profiler.run options, &block
|
8
8
|
end
|
9
9
|
|
10
|
+
def start(options = {})
|
11
|
+
Profiler.run({ profiler: :sandwich, action: :start }.merge options)
|
12
|
+
end
|
13
|
+
|
14
|
+
def finish(options = {})
|
15
|
+
Profiler.run({ profiler: :sandwich, action: :finish }.merge options)
|
16
|
+
end
|
17
|
+
|
10
18
|
def method_cache_invalidations(&block)
|
11
19
|
run(&block)[:invalidations][:method]
|
12
20
|
end
|
data/test/busted_test.rb
CHANGED
@@ -8,6 +8,13 @@ class BustedTest < MiniTest::Unit::TestCase
|
|
8
8
|
assert_equal "profiler `pizza' does not exist", error.message
|
9
9
|
end
|
10
10
|
|
11
|
+
def test_invalid_profiler_action_exception
|
12
|
+
error = assert_raises ArgumentError do
|
13
|
+
Busted.start profiler: :sandwich, action: :pizza
|
14
|
+
end
|
15
|
+
assert_equal "profiler requires start or finish action", error.message
|
16
|
+
end
|
17
|
+
|
11
18
|
def test_cache_invalidations_requires_block
|
12
19
|
assert_raises LocalJumpError do
|
13
20
|
Busted.run
|
@@ -54,6 +61,14 @@ class BustedTest < MiniTest::Unit::TestCase
|
|
54
61
|
assert_equal 0, Busted.constant_cache_invalidations { 1 + 1 }
|
55
62
|
end
|
56
63
|
|
64
|
+
def test_start_finish_with_addition
|
65
|
+
Busted.start
|
66
|
+
1 + 1
|
67
|
+
report = Busted.finish
|
68
|
+
assert_equal 0, report[:invalidations][:method]
|
69
|
+
assert_equal 0, report[:invalidations][:constant]
|
70
|
+
end
|
71
|
+
|
57
72
|
def test_cache_invalidations_with_new_constant
|
58
73
|
report = Busted.run { self.class.const_set :"CHEESE", "cheese" }
|
59
74
|
assert_equal 0, report[:invalidations][:method]
|
@@ -74,6 +89,14 @@ class BustedTest < MiniTest::Unit::TestCase
|
|
74
89
|
assert_equal 1, invalidations
|
75
90
|
end
|
76
91
|
|
92
|
+
def test_start_finish_with_new_constant
|
93
|
+
Busted.start
|
94
|
+
self.class.const_set :"PEPPERONI", "pepperoni"
|
95
|
+
report = Busted.finish
|
96
|
+
assert_equal 0, report[:invalidations][:method]
|
97
|
+
assert_equal 1, report[:invalidations][:constant]
|
98
|
+
end
|
99
|
+
|
77
100
|
def test_cache_invalidations_with_new_method
|
78
101
|
report = Busted.run { Object.class_exec { def cheese; end } }
|
79
102
|
assert_equal 1, report[:invalidations][:method]
|
@@ -94,6 +117,14 @@ class BustedTest < MiniTest::Unit::TestCase
|
|
94
117
|
assert_equal 0, invalidations
|
95
118
|
end
|
96
119
|
|
120
|
+
def test_start_finish_with_new_method
|
121
|
+
Busted.start
|
122
|
+
Object.class_exec { def pepperoni; end }
|
123
|
+
report = Busted.finish
|
124
|
+
assert_equal 1, report[:invalidations][:method]
|
125
|
+
assert_equal 0, report[:invalidations][:constant]
|
126
|
+
end
|
127
|
+
|
97
128
|
def test_cache_invalidations_with_new_class
|
98
129
|
report = Busted.run { Object.class_eval "class ThreeCheese; end" }
|
99
130
|
assert_equal 0, report[:invalidations][:method]
|
@@ -114,6 +145,14 @@ class BustedTest < MiniTest::Unit::TestCase
|
|
114
145
|
assert_equal 1, invalidations
|
115
146
|
end
|
116
147
|
|
148
|
+
def test_start_finish_with_new_class
|
149
|
+
Busted.start
|
150
|
+
Object.class_eval "class Pepperoni; end"
|
151
|
+
report = Busted.finish
|
152
|
+
assert_equal 0, report[:invalidations][:method]
|
153
|
+
assert_equal 1, report[:invalidations][:constant]
|
154
|
+
end
|
155
|
+
|
117
156
|
def test_cache_predicate_requires_block
|
118
157
|
assert_raises LocalJumpError do
|
119
158
|
Busted.cache?
|
@@ -200,7 +239,18 @@ class BustedTest < MiniTest::Unit::TestCase
|
|
200
239
|
assert_equal 0, report[:invalidations][:constant]
|
201
240
|
assert_equal "global", report[:traces][:method][0][:class]
|
202
241
|
assert_match /test\/busted_test.rb\z/, report[:traces][:method][0][:sourcefile]
|
203
|
-
assert_equal "
|
242
|
+
assert_equal "237", report[:traces][:method][0][:lineno]
|
243
|
+
end
|
244
|
+
|
245
|
+
def test_start_finish_and_traces_with_new_method
|
246
|
+
Busted.start trace: true
|
247
|
+
Object.class_exec { def candy; end }
|
248
|
+
report = Busted.finish
|
249
|
+
assert_equal 1, report[:invalidations][:method]
|
250
|
+
assert_equal 0, report[:invalidations][:constant]
|
251
|
+
assert_equal "global", report[:traces][:method][0][:class]
|
252
|
+
assert_match /test\/busted_test.rb\z/, report[:traces][:method][0][:sourcefile]
|
253
|
+
assert_equal "247", report[:traces][:method][0][:lineno]
|
204
254
|
end
|
205
255
|
end
|
206
256
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: busted
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simeon F. Willbanks
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -60,6 +60,7 @@ files:
|
|
60
60
|
- lib/busted/current_process.rb
|
61
61
|
- lib/busted/profiler.rb
|
62
62
|
- lib/busted/profiler/default.rb
|
63
|
+
- lib/busted/profiler/sandwich.rb
|
63
64
|
- lib/busted/traceable.rb
|
64
65
|
- lib/busted/tracer.rb
|
65
66
|
- lib/busted/version.rb
|