aspector 0.7.0 → 0.7.1
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/Gemfile +2 -2
- data/Gemfile.lock +6 -9
- data/README.rdoc +5 -4
- data/VERSION +1 -1
- data/aspector.gemspec +29 -20
- data/examples/activerecord_hooks.rb +2 -2
- data/examples/around_example.rb +1 -0
- data/examples/aspector_apply_example.rb +4 -3
- data/examples/aspector_example.rb +1 -0
- data/examples/cache_aspect.rb +2 -2
- data/examples/exception_handler.rb +36 -0
- data/examples/logging_aspect.rb +35 -0
- data/examples/retry_aspect.rb +41 -0
- data/lib/aspector/advice.rb +3 -7
- data/lib/aspector/base.rb +52 -29
- data/lib/aspector/context.rb +2 -1
- data/lib/aspector/deferred_logic.rb +3 -7
- data/lib/aspector/method_matcher.rb +6 -9
- data/performance-tests/after_test.rb +25 -0
- data/performance-tests/around_test.rb +27 -0
- data/performance-tests/before_test.rb +25 -0
- data/performance-tests/combined_test.rb +33 -0
- data/performance-tests/method_invocation_test.rb +25 -0
- data/performance-tests/test_helper.rb +9 -0
- data/spec/functional/advices_on_private_methods_spec.rb +21 -0
- data/spec/functional/aspect_on_eigen_class_spec.rb +66 -0
- data/spec/functional/aspect_on_object_spec.rb +20 -0
- data/spec/{aspector_spec.rb → functional/aspector_spec.rb} +13 -57
- data/spec/functional/aspects_combined_spec.rb +42 -0
- data/spec/functional/execution_order_spec.rb +36 -0
- data/spec/spec_helper.rb +16 -1
- data/spec/unit/advice_spec.rb +4 -0
- data/spec/{aspector → unit}/after_spec.rb +42 -38
- data/spec/{aspector → unit}/around_spec.rb +22 -18
- data/spec/unit/base_class_methods_spec.rb +28 -0
- data/spec/unit/base_spec.rb +81 -0
- data/spec/{aspector → unit}/before_spec.rb +27 -18
- data/spec/unit/deferred_logic_spec.rb +23 -0
- data/spec/unit/method_matcher_spec.rb +43 -0
- metadata +63 -69
- data/spec/advices_on_private_methods_spec.rb +0 -29
- data/spec/aspect_on_eigen_class_spec.rb +0 -86
- data/spec/aspect_on_object_spec.rb +0 -32
- data/spec/aspector/aspect_spec.rb +0 -86
- data/spec/aspector/base_spec.rb +0 -35
- data/spec/aspects_combined_spec.rb +0 -55
- data/spec/execution_order_spec.rb +0 -62
@@ -0,0 +1,81 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "Aspector::Base" do
|
4
|
+
it "default options" do
|
5
|
+
aspect = Aspector do
|
6
|
+
default :test => 'value'
|
7
|
+
end
|
8
|
+
|
9
|
+
aspect.default_options[:test].should == 'value'
|
10
|
+
end
|
11
|
+
|
12
|
+
it "#options is used to access options set when aspect is applied" do
|
13
|
+
klass = create_test_class
|
14
|
+
|
15
|
+
aspect = Aspector do
|
16
|
+
before options[:methods] do
|
17
|
+
value << "do_this"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
aspect.apply(klass, :methods => :test)
|
22
|
+
|
23
|
+
obj = klass.new
|
24
|
+
obj.test
|
25
|
+
obj.value.should == %w"do_this test"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "#apply" do
|
29
|
+
klass = create_test_class
|
30
|
+
|
31
|
+
aspect = Aspector do
|
32
|
+
before :test do value << "do_before" end
|
33
|
+
end
|
34
|
+
|
35
|
+
aspect.apply(klass)
|
36
|
+
|
37
|
+
obj = klass.new
|
38
|
+
obj.test
|
39
|
+
obj.value.should == %w"do_before test"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "use #target to add method to target class/module" do
|
43
|
+
klass = create_test_class
|
44
|
+
|
45
|
+
aspector(klass) do
|
46
|
+
target do
|
47
|
+
def do_this
|
48
|
+
value << "do_this"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
before :test, :do_this
|
53
|
+
end
|
54
|
+
|
55
|
+
obj = klass.new
|
56
|
+
obj.test
|
57
|
+
obj.value.should == %w"do_this test"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "#target takes aspect as argument" do
|
61
|
+
klass = create_test_class
|
62
|
+
|
63
|
+
class TargetArgumentTestAspect < Aspector::Base
|
64
|
+
target do |aspect|
|
65
|
+
define_method :do_this do
|
66
|
+
value << "do_this(#{aspect.class})"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
before :test, :do_this
|
71
|
+
end
|
72
|
+
|
73
|
+
TargetArgumentTestAspect.apply(klass)
|
74
|
+
|
75
|
+
obj = klass.new
|
76
|
+
obj.test
|
77
|
+
obj.value.should == %w"do_this(TargetArgumentTestAspect) test"
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
@@ -2,15 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
describe "Before advices" do
|
4
4
|
it "should work" do
|
5
|
-
klass =
|
6
|
-
def value
|
7
|
-
@value ||= []
|
8
|
-
end
|
9
|
-
|
10
|
-
def test
|
11
|
-
value << "test"
|
12
|
-
end
|
13
|
-
|
5
|
+
klass = create_test_class do
|
14
6
|
def do_this
|
15
7
|
value << "do_this"
|
16
8
|
end
|
@@ -26,15 +18,7 @@ describe "Before advices" do
|
|
26
18
|
end
|
27
19
|
|
28
20
|
it "logic in block" do
|
29
|
-
klass =
|
30
|
-
def value
|
31
|
-
@value ||= []
|
32
|
-
end
|
33
|
-
|
34
|
-
def test
|
35
|
-
value << "test"
|
36
|
-
end
|
37
|
-
end
|
21
|
+
klass = create_test_class
|
38
22
|
|
39
23
|
aspector(klass) do
|
40
24
|
before(:test){ value << 'do_block' }
|
@@ -69,4 +53,29 @@ describe "Before advices" do
|
|
69
53
|
obj.value.should == %w"do_this test"
|
70
54
|
end
|
71
55
|
|
56
|
+
it "method_name_arg" do
|
57
|
+
klass = Class.new do
|
58
|
+
aspector do
|
59
|
+
before :test, :do_this, :method_name_arg => true
|
60
|
+
end
|
61
|
+
|
62
|
+
def value
|
63
|
+
@value ||= []
|
64
|
+
end
|
65
|
+
|
66
|
+
def test
|
67
|
+
value << "test"
|
68
|
+
end
|
69
|
+
|
70
|
+
def do_this method
|
71
|
+
value << "do_this(#{method})"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
obj = klass.new
|
76
|
+
obj.test
|
77
|
+
obj.value.should == %w"do_this(test) test"
|
78
|
+
end
|
79
|
+
|
72
80
|
end
|
81
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
module Aspector
|
4
|
+
describe DeferredLogic do
|
5
|
+
it "should work with block" do
|
6
|
+
klass = Class.new do
|
7
|
+
def self.test; 'test'; end
|
8
|
+
end
|
9
|
+
|
10
|
+
logic = DeferredLogic.new(lambda{ test })
|
11
|
+
|
12
|
+
logic.apply(klass).should == 'test'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "block can take an argument" do
|
16
|
+
logic = DeferredLogic.new(lambda{|arg| arg })
|
17
|
+
|
18
|
+
logic.apply(Class.new, 'test').should == 'test'
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
module Aspector
|
4
|
+
describe MethodMatcher do
|
5
|
+
it "should match String" do
|
6
|
+
MethodMatcher.new('test').match?('test').should_not be_nil
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should match regular expression" do
|
10
|
+
MethodMatcher.new(/test/).match?('test').should_not be_nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return true if any item matches" do
|
14
|
+
MethodMatcher.new('test1', 'test2').match?('test2').should_not be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should return nil if none matches" do
|
18
|
+
MethodMatcher.new('test1', 'test2').match?('test3').should be_nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it "deferred logic" do
|
22
|
+
logic = DeferredLogic.new ""
|
23
|
+
matcher = MethodMatcher.new(logic)
|
24
|
+
|
25
|
+
aspect = mock(Aspector::Base)
|
26
|
+
aspect.should_receive(:deferred_logic_results).with(logic).once.and_return(/test/)
|
27
|
+
|
28
|
+
matcher.match?('test', aspect).should_not be_nil
|
29
|
+
end
|
30
|
+
|
31
|
+
it "deferred option" do
|
32
|
+
option = DeferredOption.new[:methods]
|
33
|
+
matcher = MethodMatcher.new(option)
|
34
|
+
|
35
|
+
aspect = mock(Aspector::Base)
|
36
|
+
aspect.should_receive(:options).once.and_return({:methods => /test/})
|
37
|
+
|
38
|
+
matcher.match?('test', aspect).should_not be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aspector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 0.7.
|
9
|
+
- 1
|
10
|
+
version: 0.7.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Guoliang Cao
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-02-09 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -34,43 +34,11 @@ dependencies:
|
|
34
34
|
- 0
|
35
35
|
version: 2.3.0
|
36
36
|
requirement: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
prerelease: false
|
39
|
-
name: mocha
|
40
|
-
type: :development
|
41
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
|
-
requirements:
|
44
|
-
- - ~>
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
hash: 55
|
47
|
-
segments:
|
48
|
-
- 0
|
49
|
-
- 10
|
50
|
-
- 0
|
51
|
-
version: 0.10.0
|
52
|
-
requirement: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
prerelease: false
|
55
|
-
name: bundler
|
56
|
-
type: :development
|
57
|
-
version_requirements: &id003 !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
|
-
requirements:
|
60
|
-
- - ~>
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
hash: 23
|
63
|
-
segments:
|
64
|
-
- 1
|
65
|
-
- 0
|
66
|
-
- 0
|
67
|
-
version: 1.0.0
|
68
|
-
requirement: *id003
|
69
37
|
- !ruby/object:Gem::Dependency
|
70
38
|
prerelease: false
|
71
39
|
name: jeweler
|
72
40
|
type: :development
|
73
|
-
version_requirements: &
|
41
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
74
42
|
none: false
|
75
43
|
requirements:
|
76
44
|
- - ~>
|
@@ -81,12 +49,12 @@ dependencies:
|
|
81
49
|
- 6
|
82
50
|
- 4
|
83
51
|
version: 1.6.4
|
84
|
-
requirement: *
|
52
|
+
requirement: *id002
|
85
53
|
- !ruby/object:Gem::Dependency
|
86
54
|
prerelease: false
|
87
55
|
name: rcov
|
88
56
|
type: :development
|
89
|
-
version_requirements: &
|
57
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
90
58
|
none: false
|
91
59
|
requirements:
|
92
60
|
- - ">="
|
@@ -95,12 +63,12 @@ dependencies:
|
|
95
63
|
segments:
|
96
64
|
- 0
|
97
65
|
version: "0"
|
98
|
-
requirement: *
|
66
|
+
requirement: *id003
|
99
67
|
- !ruby/object:Gem::Dependency
|
100
68
|
prerelease: false
|
101
69
|
name: reek
|
102
70
|
type: :development
|
103
|
-
version_requirements: &
|
71
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
104
72
|
none: false
|
105
73
|
requirements:
|
106
74
|
- - ~>
|
@@ -111,12 +79,12 @@ dependencies:
|
|
111
79
|
- 2
|
112
80
|
- 8
|
113
81
|
version: 1.2.8
|
114
|
-
requirement: *
|
82
|
+
requirement: *id004
|
115
83
|
- !ruby/object:Gem::Dependency
|
116
84
|
prerelease: false
|
117
85
|
name: roodi
|
118
86
|
type: :development
|
119
|
-
version_requirements: &
|
87
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
120
88
|
none: false
|
121
89
|
requirements:
|
122
90
|
- - ~>
|
@@ -127,12 +95,26 @@ dependencies:
|
|
127
95
|
- 1
|
128
96
|
- 0
|
129
97
|
version: 2.1.0
|
130
|
-
requirement: *
|
98
|
+
requirement: *id005
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
prerelease: false
|
101
|
+
name: ruby-prof
|
102
|
+
type: :development
|
103
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
hash: 3
|
109
|
+
segments:
|
110
|
+
- 0
|
111
|
+
version: "0"
|
112
|
+
requirement: *id006
|
131
113
|
- !ruby/object:Gem::Dependency
|
132
114
|
prerelease: false
|
133
115
|
name: guard
|
134
116
|
type: :development
|
135
|
-
version_requirements: &
|
117
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
136
118
|
none: false
|
137
119
|
requirements:
|
138
120
|
- - ~>
|
@@ -143,12 +125,12 @@ dependencies:
|
|
143
125
|
- 8
|
144
126
|
- 4
|
145
127
|
version: 0.8.4
|
146
|
-
requirement: *
|
128
|
+
requirement: *id007
|
147
129
|
- !ruby/object:Gem::Dependency
|
148
130
|
prerelease: false
|
149
131
|
name: guard-bundler
|
150
132
|
type: :development
|
151
|
-
version_requirements: &
|
133
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
152
134
|
none: false
|
153
135
|
requirements:
|
154
136
|
- - ~>
|
@@ -159,12 +141,12 @@ dependencies:
|
|
159
141
|
- 1
|
160
142
|
- 3
|
161
143
|
version: 0.1.3
|
162
|
-
requirement: *
|
144
|
+
requirement: *id008
|
163
145
|
- !ruby/object:Gem::Dependency
|
164
146
|
prerelease: false
|
165
147
|
name: guard-rspec
|
166
148
|
type: :development
|
167
|
-
version_requirements: &
|
149
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
168
150
|
none: false
|
169
151
|
requirements:
|
170
152
|
- - ~>
|
@@ -175,12 +157,12 @@ dependencies:
|
|
175
157
|
- 5
|
176
158
|
- 2
|
177
159
|
version: 0.5.2
|
178
|
-
requirement: *
|
160
|
+
requirement: *id009
|
179
161
|
- !ruby/object:Gem::Dependency
|
180
162
|
prerelease: false
|
181
163
|
name: guard-shell
|
182
164
|
type: :development
|
183
|
-
version_requirements: &
|
165
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
184
166
|
none: false
|
185
167
|
requirements:
|
186
168
|
- - ~>
|
@@ -191,12 +173,12 @@ dependencies:
|
|
191
173
|
- 1
|
192
174
|
- 1
|
193
175
|
version: 0.1.1
|
194
|
-
requirement: *
|
176
|
+
requirement: *id010
|
195
177
|
- !ruby/object:Gem::Dependency
|
196
178
|
prerelease: false
|
197
179
|
name: rb-fsevent
|
198
180
|
type: :development
|
199
|
-
version_requirements: &
|
181
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
200
182
|
none: false
|
201
183
|
requirements:
|
202
184
|
- - ~>
|
@@ -208,12 +190,12 @@ dependencies:
|
|
208
190
|
- 3
|
209
191
|
- 1
|
210
192
|
version: 0.4.3.1
|
211
|
-
requirement: *
|
193
|
+
requirement: *id011
|
212
194
|
- !ruby/object:Gem::Dependency
|
213
195
|
prerelease: false
|
214
196
|
name: growl
|
215
197
|
type: :development
|
216
|
-
version_requirements: &
|
198
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
217
199
|
none: false
|
218
200
|
requirements:
|
219
201
|
- - ~>
|
@@ -224,12 +206,12 @@ dependencies:
|
|
224
206
|
- 0
|
225
207
|
- 3
|
226
208
|
version: 1.0.3
|
227
|
-
requirement: *
|
209
|
+
requirement: *id012
|
228
210
|
- !ruby/object:Gem::Dependency
|
229
211
|
prerelease: false
|
230
212
|
name: awesome_print
|
231
213
|
type: :development
|
232
|
-
version_requirements: &
|
214
|
+
version_requirements: &id013 !ruby/object:Gem::Requirement
|
233
215
|
none: false
|
234
216
|
requirements:
|
235
217
|
- - ">="
|
@@ -238,7 +220,7 @@ dependencies:
|
|
238
220
|
segments:
|
239
221
|
- 0
|
240
222
|
version: "0"
|
241
|
-
requirement: *
|
223
|
+
requirement: *id013
|
242
224
|
description: ""
|
243
225
|
email: gcao99@gmail.com
|
244
226
|
executables: []
|
@@ -266,6 +248,9 @@ files:
|
|
266
248
|
- examples/aspector_apply_example.rb
|
267
249
|
- examples/aspector_example.rb
|
268
250
|
- examples/cache_aspect.rb
|
251
|
+
- examples/exception_handler.rb
|
252
|
+
- examples/logging_aspect.rb
|
253
|
+
- examples/retry_aspect.rb
|
269
254
|
- lib/aspector.rb
|
270
255
|
- lib/aspector/advice.rb
|
271
256
|
- lib/aspector/advice_metadata.rb
|
@@ -279,18 +264,27 @@ files:
|
|
279
264
|
- lib/aspector/module_extension.rb
|
280
265
|
- lib/aspector/object_extension.rb
|
281
266
|
- lib/aspector/return_this.rb
|
282
|
-
-
|
283
|
-
-
|
284
|
-
-
|
285
|
-
-
|
286
|
-
-
|
287
|
-
-
|
288
|
-
- spec/
|
289
|
-
- spec/
|
290
|
-
- spec/
|
291
|
-
- spec/
|
292
|
-
- spec/
|
267
|
+
- performance-tests/after_test.rb
|
268
|
+
- performance-tests/around_test.rb
|
269
|
+
- performance-tests/before_test.rb
|
270
|
+
- performance-tests/combined_test.rb
|
271
|
+
- performance-tests/method_invocation_test.rb
|
272
|
+
- performance-tests/test_helper.rb
|
273
|
+
- spec/functional/advices_on_private_methods_spec.rb
|
274
|
+
- spec/functional/aspect_on_eigen_class_spec.rb
|
275
|
+
- spec/functional/aspect_on_object_spec.rb
|
276
|
+
- spec/functional/aspector_spec.rb
|
277
|
+
- spec/functional/aspects_combined_spec.rb
|
278
|
+
- spec/functional/execution_order_spec.rb
|
293
279
|
- spec/spec_helper.rb
|
280
|
+
- spec/unit/advice_spec.rb
|
281
|
+
- spec/unit/after_spec.rb
|
282
|
+
- spec/unit/around_spec.rb
|
283
|
+
- spec/unit/base_class_methods_spec.rb
|
284
|
+
- spec/unit/base_spec.rb
|
285
|
+
- spec/unit/before_spec.rb
|
286
|
+
- spec/unit/deferred_logic_spec.rb
|
287
|
+
- spec/unit/method_matcher_spec.rb
|
294
288
|
has_rdoc: true
|
295
289
|
homepage: http://github.com/gcao/aspector
|
296
290
|
licenses:
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
describe "Advices on private methods" do
|
4
|
-
it "should work" do
|
5
|
-
klass = Class.new do
|
6
|
-
def value
|
7
|
-
@value ||= []
|
8
|
-
end
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
def test
|
13
|
-
value << "test"
|
14
|
-
end
|
15
|
-
|
16
|
-
def do_before
|
17
|
-
value << "do_before"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
aspector(klass, :private_methods => true) do
|
22
|
-
before :test, :do_before
|
23
|
-
end
|
24
|
-
|
25
|
-
obj = klass.new
|
26
|
-
obj.send :test
|
27
|
-
obj.value.should == %w"do_before test"
|
28
|
-
end
|
29
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
describe "Aspector for eigen class" do
|
4
|
-
it "should work" do
|
5
|
-
klass = Class.new do
|
6
|
-
class << self
|
7
|
-
def value
|
8
|
-
@value ||= []
|
9
|
-
end
|
10
|
-
|
11
|
-
def test
|
12
|
-
value << "test"
|
13
|
-
end
|
14
|
-
|
15
|
-
def do_before
|
16
|
-
value << "do_before"
|
17
|
-
end
|
18
|
-
|
19
|
-
def do_after result
|
20
|
-
value << "do_after"
|
21
|
-
result
|
22
|
-
end
|
23
|
-
|
24
|
-
def do_around &block
|
25
|
-
value << "do_around_before"
|
26
|
-
result = block.call
|
27
|
-
value << "do_around_after"
|
28
|
-
result
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
aspector(klass, :eigen_class => true) do
|
34
|
-
before :test, :do_before
|
35
|
-
after :test, :do_after
|
36
|
-
around :test, :do_around
|
37
|
-
end
|
38
|
-
|
39
|
-
klass.test
|
40
|
-
klass.value.should == %w"do_before do_around_before test do_around_after do_after"
|
41
|
-
end
|
42
|
-
|
43
|
-
it "new methods" do
|
44
|
-
klass = Class.new do
|
45
|
-
class << self
|
46
|
-
def value
|
47
|
-
@value ||= []
|
48
|
-
end
|
49
|
-
|
50
|
-
def do_before
|
51
|
-
value << "do_before"
|
52
|
-
end
|
53
|
-
|
54
|
-
def do_after result
|
55
|
-
value << "do_after"
|
56
|
-
result
|
57
|
-
end
|
58
|
-
|
59
|
-
def do_around &block
|
60
|
-
value << "do_around_before"
|
61
|
-
result = block.call
|
62
|
-
value << "do_around_after"
|
63
|
-
result
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
aspector(klass, :eigen_class => true) do
|
69
|
-
before :test, :do_before
|
70
|
-
after :test, :do_after
|
71
|
-
around :test, :do_around
|
72
|
-
end
|
73
|
-
|
74
|
-
klass.class_eval do
|
75
|
-
class << self
|
76
|
-
def test
|
77
|
-
value << "test"
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
klass.test
|
83
|
-
klass.value.should == %w"do_before do_around_before test do_around_after do_after"
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
describe "Aspector for object" do
|
4
|
-
it "should work" do
|
5
|
-
klass = Class.new do
|
6
|
-
def value
|
7
|
-
@value ||= []
|
8
|
-
end
|
9
|
-
|
10
|
-
def test
|
11
|
-
value << "test"
|
12
|
-
end
|
13
|
-
|
14
|
-
def do_before
|
15
|
-
value << "do_before"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
obj = klass.new
|
20
|
-
|
21
|
-
aspector(obj) do
|
22
|
-
before :test, :do_before
|
23
|
-
end
|
24
|
-
|
25
|
-
obj.test
|
26
|
-
obj.value.should == %w"do_before test"
|
27
|
-
|
28
|
-
obj2 = klass.new
|
29
|
-
obj2.test
|
30
|
-
obj2.value.should == %w"test"
|
31
|
-
end
|
32
|
-
end
|