aspect4r 0.9.0 → 0.9.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/README.rdoc +23 -4
- data/VERSION +1 -1
- data/aspect4r.gemspec +11 -9
- data/examples/advices_on_class_method_example.rb +2 -2
- data/examples/around_example.rb +2 -2
- data/examples/combined_example.rb +2 -2
- data/examples/test_advices_example.rb +3 -4
- data/lib/aspect4r/base.rb +25 -23
- data/lib/aspect4r/helper.rb +34 -17
- data/lib/aspect4r/model/advice.rb +29 -4
- data/lib/aspect4r/model/aspect_data.rb +14 -5
- data/lib/aspect4r/model/method_matcher.rb +43 -0
- data/spec/aspect4r/advice_on_class_method_spec.rb +4 -4
- data/spec/aspect4r/advice_test_spec.rb +9 -20
- data/spec/aspect4r/around_spec.rb +23 -24
- data/spec/aspect4r/before_spec.rb +1 -1
- data/spec/aspect4r/class_inheritance_spec.rb +40 -6
- data/spec/aspect4r/classic_spec.rb +2 -2
- data/spec/aspect4r/helper_spec.rb +2 -2
- data/spec/aspect4r/inheritance_inclusion_combined_spec.rb +4 -4
- data/spec/aspect4r/method_added_spec.rb +2 -2
- data/spec/aspect4r/{advice_group_spec.rb → model/advice_group_spec.rb} +1 -1
- data/spec/aspect4r/model/advice_spec.rb +52 -0
- data/spec/aspect4r/model/method_matcher_spec.rb +23 -0
- data/spec/aspect4r/module_inclusion_spec.rb +8 -8
- data/spec/aspect4r/regexp_methods_spec.rb +47 -0
- data/spec/aspect4r/singleton_method_added_spec.rb +2 -2
- data/spec/aspect4r_spec.rb +58 -22
- data/test/around_test.rb +2 -2
- data/test/combined_test.rb +2 -2
- metadata +13 -11
- data/lib/aspect4r/model/advices_for_method.rb +0 -26
- data/spec/aspect4r/advice_spec.rb +0 -62
- data/spec/aspect4r/advices_for_method_spec.rb +0 -17
@@ -20,7 +20,7 @@ describe Aspect4r::Around do
|
|
20
20
|
|
21
21
|
it "should run advice method instead of original method" do
|
22
22
|
@klass.class_eval do
|
23
|
-
def do_something
|
23
|
+
def do_something value
|
24
24
|
raise 'error'
|
25
25
|
end
|
26
26
|
|
@@ -35,7 +35,7 @@ describe Aspect4r::Around do
|
|
35
35
|
i = 100
|
36
36
|
|
37
37
|
@klass.class_eval do
|
38
|
-
around :test do |
|
38
|
+
around :test do |value|
|
39
39
|
i = 200
|
40
40
|
'around_block_return'
|
41
41
|
end
|
@@ -53,7 +53,7 @@ describe Aspect4r::Around do
|
|
53
53
|
i = 100
|
54
54
|
|
55
55
|
@klass.class_eval do
|
56
|
-
around [:test] do |
|
56
|
+
around [:test] do |value|
|
57
57
|
i = 200
|
58
58
|
end
|
59
59
|
end
|
@@ -66,7 +66,7 @@ describe Aspect4r::Around do
|
|
66
66
|
|
67
67
|
it "should have access to instance variables inside advice block" do
|
68
68
|
@klass.class_eval do
|
69
|
-
around :test do |
|
69
|
+
around :test do |value|
|
70
70
|
@var = 1
|
71
71
|
end
|
72
72
|
end
|
@@ -77,13 +77,28 @@ describe Aspect4r::Around do
|
|
77
77
|
o.instance_variable_get(:@var).should == 1
|
78
78
|
end
|
79
79
|
|
80
|
+
it "should pass method name as first arg to advice block(or method) if method_name_arg is true" do
|
81
|
+
s = nil
|
82
|
+
|
83
|
+
@klass.class_eval do
|
84
|
+
around :test, :method_name_arg => true do |method, value, &block|
|
85
|
+
s = method
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
o = @klass.new
|
90
|
+
o.test('something')
|
91
|
+
|
92
|
+
s.should == 'test'
|
93
|
+
end
|
94
|
+
|
80
95
|
it "should be able to invoke original method from advice block" do
|
81
96
|
i = 100
|
82
97
|
|
83
98
|
@klass.class_eval do
|
84
|
-
around :test do |
|
99
|
+
around :test do |value, &block|
|
85
100
|
i = 200
|
86
|
-
|
101
|
+
block.call value
|
87
102
|
end
|
88
103
|
end
|
89
104
|
|
@@ -97,8 +112,8 @@ describe Aspect4r::Around do
|
|
97
112
|
|
98
113
|
it "should be able to invoke original method from advice method" do
|
99
114
|
@klass.class_eval do
|
100
|
-
def do_something
|
101
|
-
|
115
|
+
def do_something value
|
116
|
+
yield value
|
102
117
|
end
|
103
118
|
|
104
119
|
around :test, :do_something
|
@@ -109,20 +124,4 @@ describe Aspect4r::Around do
|
|
109
124
|
|
110
125
|
o.value.should == 'something'
|
111
126
|
end
|
112
|
-
|
113
|
-
it "should be able to access method name through proxy.name (this subjects to change)" do
|
114
|
-
s = nil
|
115
|
-
|
116
|
-
@klass.class_eval do
|
117
|
-
around :test do |proxy, value|
|
118
|
-
s = proxy.name
|
119
|
-
a4r_invoke proxy, value
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
o = @klass.new
|
124
|
-
o.test('something')
|
125
|
-
|
126
|
-
s.should == 'test'
|
127
|
-
end
|
128
127
|
end
|
@@ -15,9 +15,9 @@ describe Aspect4r do
|
|
15
15
|
@value << "test"
|
16
16
|
end
|
17
17
|
|
18
|
-
around :test do |
|
18
|
+
around :test do |&block|
|
19
19
|
@value << "around1"
|
20
|
-
|
20
|
+
block.call
|
21
21
|
@value << "around2"
|
22
22
|
end
|
23
23
|
|
@@ -200,9 +200,9 @@ describe Aspect4r do
|
|
200
200
|
class Child1 < parent
|
201
201
|
include Aspect4r
|
202
202
|
|
203
|
-
around :test do |
|
203
|
+
around :test do |&block|
|
204
204
|
@value << "around(before)"
|
205
|
-
|
205
|
+
block.call
|
206
206
|
@value << "around(after)"
|
207
207
|
end
|
208
208
|
end
|
@@ -239,9 +239,9 @@ describe Aspect4r do
|
|
239
239
|
class Child2 < parent
|
240
240
|
include Aspect4r
|
241
241
|
|
242
|
-
around :test do |
|
242
|
+
around :test do |&block|
|
243
243
|
@value << "around(before)"
|
244
|
-
|
244
|
+
block.call
|
245
245
|
@value << "around(after)"
|
246
246
|
end
|
247
247
|
end
|
@@ -251,4 +251,38 @@ describe Aspect4r do
|
|
251
251
|
|
252
252
|
o.value.should == %w(around(before) before test after around(after))
|
253
253
|
end
|
254
|
+
|
255
|
+
it "inherit advice from module" do
|
256
|
+
pending
|
257
|
+
mod = Module.new do
|
258
|
+
include Aspect4r
|
259
|
+
|
260
|
+
before :test, :inherit => true do
|
261
|
+
@value << "before"
|
262
|
+
end
|
263
|
+
|
264
|
+
after :test do
|
265
|
+
@value << "after"
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
klass = Class.new do
|
270
|
+
include mod
|
271
|
+
|
272
|
+
attr :value
|
273
|
+
|
274
|
+
def initialize
|
275
|
+
@value = []
|
276
|
+
end
|
277
|
+
|
278
|
+
def test
|
279
|
+
@value << "test"
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
o = klass.new
|
284
|
+
o.test
|
285
|
+
|
286
|
+
o.value.should == %w(before test)
|
287
|
+
end
|
254
288
|
end
|
@@ -9,9 +9,9 @@ describe Aspect4r do
|
|
9
9
|
@value << "test"
|
10
10
|
end
|
11
11
|
|
12
|
-
around :test do |
|
12
|
+
around :test do |&block|
|
13
13
|
@value << "around1"
|
14
|
-
|
14
|
+
block.call
|
15
15
|
@value << "around2"
|
16
16
|
end
|
17
17
|
|
@@ -52,9 +52,9 @@ describe Aspect4r do
|
|
52
52
|
@value << "test(module)"
|
53
53
|
end
|
54
54
|
|
55
|
-
around :test do |
|
55
|
+
around :test do |&block|
|
56
56
|
@value << "around1"
|
57
|
-
|
57
|
+
block.call
|
58
58
|
@value << "around2"
|
59
59
|
end
|
60
60
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
module Aspect4r::Model
|
4
|
+
describe Advice do
|
5
|
+
it "before? returns true for before advice" do
|
6
|
+
advice = Advice.new Advice::BEFORE, MethodMatcher.new, :advice_method, :group
|
7
|
+
advice.before?.should be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
it "before_filter? returns false for before advice" do
|
11
|
+
advice = Advice.new Advice::BEFORE, MethodMatcher.new, :advice_method, :group
|
12
|
+
advice.before_filter?.should be_false
|
13
|
+
end
|
14
|
+
|
15
|
+
it "before? returns false for before_filter advice" do
|
16
|
+
advice = Advice.new Advice::BEFORE, MethodMatcher.new, :advice_method, :group, :skip_if_false => true
|
17
|
+
advice.before?.should be_false
|
18
|
+
end
|
19
|
+
|
20
|
+
it "before_filter? returns true for before_filter advice" do
|
21
|
+
advice = Advice.new Advice::BEFORE, MethodMatcher.new, :advice_method, :group, :skip_if_false => true
|
22
|
+
advice.before_filter?.should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "invoke before advice" do
|
26
|
+
advice = Advice.new Advice::BEFORE, MethodMatcher.new, :advice_method, :group
|
27
|
+
|
28
|
+
o = Object.new
|
29
|
+
o.expects(:advice_method).with(1)
|
30
|
+
|
31
|
+
advice.invoke(o, 1)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "invoke after advice" do
|
35
|
+
advice = Advice.new Advice::AFTER, MethodMatcher.new, :advice_method, :group
|
36
|
+
|
37
|
+
o = Object.new
|
38
|
+
o.expects(:advice_method).with(1)
|
39
|
+
|
40
|
+
advice.invoke(o, 1)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "invoke around advice" do
|
44
|
+
advice = Advice.new Advice::AROUND, MethodMatcher.new, :advice_method, :group
|
45
|
+
|
46
|
+
o = Object.new
|
47
|
+
o.expects(:advice_method).with(1)
|
48
|
+
|
49
|
+
advice.invoke(o, 1)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
module Aspect4r
|
4
|
+
module Model
|
5
|
+
describe MethodMatcher do
|
6
|
+
it "should match String" do
|
7
|
+
MethodMatcher.new('test').match?('test').should_not be_nil
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should match regular expression" do
|
11
|
+
MethodMatcher.new(/test/).match?('test').should_not be_nil
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return true if any item matches" do
|
15
|
+
MethodMatcher.new('test1', 'test2').match?('test2').should_not be_nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return nil if none matches" do
|
19
|
+
MethodMatcher.new('test1', 'test2').match?('test3').should be_nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -17,9 +17,9 @@ describe Aspect4r do
|
|
17
17
|
@value << "test"
|
18
18
|
end
|
19
19
|
|
20
|
-
around :test do |
|
20
|
+
around :test do |&block|
|
21
21
|
@value << "around1"
|
22
|
-
|
22
|
+
block.call
|
23
23
|
@value << "around2"
|
24
24
|
end
|
25
25
|
|
@@ -60,9 +60,9 @@ describe Aspect4r do
|
|
60
60
|
@value << "test(module)"
|
61
61
|
end
|
62
62
|
|
63
|
-
around :test do |
|
63
|
+
around :test do |&block|
|
64
64
|
@value << "around1"
|
65
|
-
|
65
|
+
block.call
|
66
66
|
@value << "around2"
|
67
67
|
end
|
68
68
|
|
@@ -125,9 +125,9 @@ describe Aspect4r do
|
|
125
125
|
@value << "test(module)"
|
126
126
|
end
|
127
127
|
|
128
|
-
around :test do |
|
128
|
+
around :test do |&block|
|
129
129
|
@value << "around1"
|
130
|
-
|
130
|
+
block.call
|
131
131
|
@value << "around2"
|
132
132
|
end
|
133
133
|
|
@@ -169,9 +169,9 @@ describe Aspect4r do
|
|
169
169
|
@value << "test(module)"
|
170
170
|
end
|
171
171
|
|
172
|
-
around :test do |
|
172
|
+
around :test do |&block|
|
173
173
|
@value << "around1"
|
174
|
-
|
174
|
+
block.call
|
175
175
|
@value << "around2"
|
176
176
|
end
|
177
177
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "Advices matched by regular expression" do
|
4
|
+
it "should not apply to methods defined before advice" do
|
5
|
+
@klass = Class.new do
|
6
|
+
include Aspect4r
|
7
|
+
|
8
|
+
attr :value
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@value = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def test
|
15
|
+
@value << "test"
|
16
|
+
end
|
17
|
+
|
18
|
+
before /test/ do
|
19
|
+
@value << "before"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
@klass.new.test.should == %w"test"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should not apply to methods defined after advice" do
|
27
|
+
@klass = Class.new do
|
28
|
+
include Aspect4r
|
29
|
+
|
30
|
+
attr :value
|
31
|
+
|
32
|
+
def initialize
|
33
|
+
@value = []
|
34
|
+
end
|
35
|
+
|
36
|
+
before /test/ do
|
37
|
+
@value << "before"
|
38
|
+
end
|
39
|
+
|
40
|
+
def test
|
41
|
+
@value << "test"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
@klass.new.test.should == %w"before test"
|
46
|
+
end
|
47
|
+
end
|
data/spec/aspect4r_spec.rb
CHANGED
@@ -1,5 +1,41 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
|
+
describe "Mixing regular expressions and string" do
|
4
|
+
it "should work" do
|
5
|
+
@klass = Class.new do
|
6
|
+
include Aspect4r
|
7
|
+
|
8
|
+
before /do_/, "test" do
|
9
|
+
@value << "before"
|
10
|
+
end
|
11
|
+
|
12
|
+
attr :value
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@value = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def test
|
19
|
+
@value << "test"
|
20
|
+
end
|
21
|
+
|
22
|
+
def do_something
|
23
|
+
@value << "do_something"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
o = @klass.new
|
28
|
+
o.test
|
29
|
+
|
30
|
+
o.value.should == %w(before test)
|
31
|
+
|
32
|
+
o = @klass.new
|
33
|
+
o.do_something
|
34
|
+
|
35
|
+
o.value.should == %w(before do_something)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
3
39
|
describe "Aspect4r execution order" do
|
4
40
|
before do
|
5
41
|
@klass = Class.new do
|
@@ -19,9 +55,9 @@ describe "Aspect4r execution order" do
|
|
19
55
|
|
20
56
|
it "around + before + after" do
|
21
57
|
@klass.class_eval do
|
22
|
-
around :test do |
|
58
|
+
around :test do |&block|
|
23
59
|
@value << "around1"
|
24
|
-
|
60
|
+
block.call
|
25
61
|
@value << "around2"
|
26
62
|
end
|
27
63
|
|
@@ -51,9 +87,9 @@ describe "Aspect4r execution order" do
|
|
51
87
|
@value << "after"
|
52
88
|
end
|
53
89
|
|
54
|
-
around :test do |
|
90
|
+
around :test do |&block|
|
55
91
|
@value << "around1"
|
56
|
-
|
92
|
+
block.call
|
57
93
|
@value << "around2"
|
58
94
|
end
|
59
95
|
end
|
@@ -66,15 +102,15 @@ describe "Aspect4r execution order" do
|
|
66
102
|
|
67
103
|
it "2 around + 2 before + 2 after" do
|
68
104
|
@klass.class_eval do
|
69
|
-
around :test do |
|
105
|
+
around :test do |&block|
|
70
106
|
@value << "around11"
|
71
|
-
|
107
|
+
block.call
|
72
108
|
@value << "around12"
|
73
109
|
end
|
74
110
|
|
75
|
-
around :test do |
|
111
|
+
around :test do |&block|
|
76
112
|
@value << "around21"
|
77
|
-
|
113
|
+
block.call
|
78
114
|
@value << "around22"
|
79
115
|
end
|
80
116
|
|
@@ -111,9 +147,9 @@ describe "Aspect4r execution order" do
|
|
111
147
|
@value << "after1"
|
112
148
|
end
|
113
149
|
|
114
|
-
around :test do |
|
150
|
+
around :test do |&block|
|
115
151
|
@value << "around1"
|
116
|
-
|
152
|
+
block.call
|
117
153
|
@value << "around2"
|
118
154
|
end
|
119
155
|
|
@@ -142,8 +178,8 @@ describe "Aspect4r result handling" do
|
|
142
178
|
"test"
|
143
179
|
end
|
144
180
|
|
145
|
-
around :test do |
|
146
|
-
result =
|
181
|
+
around :test do |&block|
|
182
|
+
result = block.call
|
147
183
|
"around1 #{result} around2"
|
148
184
|
end
|
149
185
|
|
@@ -180,9 +216,9 @@ describe "Aspect4r chaining (add advice to advice method)" do
|
|
180
216
|
@value << "process_result"
|
181
217
|
end
|
182
218
|
|
183
|
-
around :test do |
|
219
|
+
around :test do |&block|
|
184
220
|
@value << "around11"
|
185
|
-
|
221
|
+
block.call
|
186
222
|
@value << "around12"
|
187
223
|
end
|
188
224
|
|
@@ -231,8 +267,8 @@ describe "Aspect4r chaining (add advice to advice method)" do
|
|
231
267
|
"test"
|
232
268
|
end
|
233
269
|
|
234
|
-
def around_test
|
235
|
-
result =
|
270
|
+
def around_test
|
271
|
+
result = yield
|
236
272
|
"around1 #{result} around2"
|
237
273
|
end
|
238
274
|
|
@@ -265,8 +301,8 @@ describe "Aspect4r chaining (add advice to advice method)" do
|
|
265
301
|
"test"
|
266
302
|
end
|
267
303
|
|
268
|
-
def around_test
|
269
|
-
result =
|
304
|
+
def around_test
|
305
|
+
result = yield
|
270
306
|
"around1 #{result} around2"
|
271
307
|
end
|
272
308
|
|
@@ -278,13 +314,13 @@ describe "Aspect4r chaining (add advice to advice method)" do
|
|
278
314
|
|
279
315
|
after :test, :after_test
|
280
316
|
|
281
|
-
around :after_test do
|
282
|
-
result =
|
317
|
+
around :after_test do |*args, &block|
|
318
|
+
result = block.call *args
|
283
319
|
"around1(after_test) " + result + " around2(after_test)"
|
284
320
|
end
|
285
321
|
|
286
|
-
around :around_test do
|
287
|
-
result =
|
322
|
+
around :around_test do |*args, &block|
|
323
|
+
result = block.call *args
|
288
324
|
"around1(around_test) " + result + " around2(around_test)"
|
289
325
|
end
|
290
326
|
end
|
data/test/around_test.rb
CHANGED